【问题标题】:jQuery sort and appendTo not working in Internet Explorer and SafarijQuery 排序和 appendTo 在 Internet Explorer 和 Safari 中不起作用
【发布时间】:2015-12-15 05:31:58
【问题描述】:

我正在使用 jQuery sortappendTo 函数根据内容重新排序 span 标签列表。

它应该很简单,在 Firefox 和 Chrome 中运行良好,但在 Windows 上的 Internet Explorer 11 和 Safari 5 中无法运行,我找不到原因。

HTML:

<div class="ube-all">
   <div class="ube-article">
     <span>bbbb</span>
   </div>
   <div class="ube-article">
     <span>aaaaa</span>
   </div>
   <div class="ube-article">
     <span>ccc</span>
   </div>
</div>

jQuery 脚本:

$(document).ready(function() {
  $('.ube-all .ube-article').sort(function(a,b){
    return $.trim($(a).find('span').eq(0).text())>$.trim($(b).find('span').eq(0).text());
  }).appendTo('.ube-all');
});

这里有一个 jsFiddle:

https://jsfiddle.net/nxsby7rs/

有什么想法吗?

【问题讨论】:

    标签: javascript jquery internet-explorer safari


    【解决方案1】:

    数组排序方法回调函数应该返回负数、正数或0 的整数,而不是从&gt; 运算符获得的布尔值。

    编写排序函数的正确方法是比较字符串,然后根据比较返回一个整数。

    工作示例:

    $(document).ready(function() {
      $('.ube-all .ube-article').sort(function(a,b){
        var stra = $.trim($(a).find('span').eq(0).text());
        var strb = $.trim($(b).find('span').eq(0).text());
        if (stra < strb) { return -1; }
        if (stra > strb) { return 1; }
        return 0;
      }).appendTo('.ube-all');
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    
    <div class="ube-all">
       <div class="ube-article">
         <span>bbbb</span>
       </div>
       <div class="ube-article">
         <span>aaaaa</span>
       </div>
       <div class="ube-article">
         <span>ccc</span>
       </div>
    </div>

    由于排序函数需要整数,所以真正的问题似乎是:

    为什么这段代码在某些浏览器中完全有效?

    不同的浏览器使用不同的排序算法。有可能使用一些排序算法,可以将true 类型转换为正的1false0 并获得有意义的结果。然而,这是在未定义行为的领域,应该避免。

    【讨论】:

    • 哦!我知道这一定是我的愚蠢行为。我对它在 Firefox 和 chrome 中工作的事实感到困惑。谢谢你开导我!我会尽可能标记赏金。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多