jQuery排序和appendTo在Internet Explorer和Safari中不起作用

jQuery sort and appendTo not working in Internet Explorer and Safari

本文关键字:Safari Explorer 不起作用 排序 appendTo jQuery Internet      更新时间:2023-09-26

我使用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/

知道吗?

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

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

工作示例:

$(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类型转换为正1,将false类型转换为0,并得到有意义的结果。然而,这是在未定义行为的土地上,应该避免。