jQuery显示为对元素进行随机排序

jQuery appears to sort elements randomly

本文关键字:随机 排序 元素 显示 jQuery      更新时间:2023-09-26

我正在尝试对UI中的元素列表进行排序:

  $('.stuff').sort(function(a,b) {
    a = $(a).attr('data-date');
    b = $(b).attr('data-date');
    console.log(a + " > " + b);
    console.log(a > b);
    return a >= b;
  }).appendTo('#stuff_container');

html看起来有点像

 <div class='stuff' data-date='1278395142'>...</div>
 <div class='stuff' data-date='1378395142'>...</div>

如果我把日志记录放在那里,我可以看到它正确地进行了比较,当比较为true时返回true。然而,当我运行排序时,在UI中,元素会随机出现。如果我重复执行这个代码,它会不断随机化顺序。我可以在调试控制台中通过查看数据属性是否都不正常来验证这一点。

我在谷歌上找不到任何关于这里可能发生的事情的参考资料。明天我会更深入地研究jQuery,但我想我会把它扔掉。jQuery 1.4.2(是的…)谢谢!

传递给Array.prototype.sort的回调应该返回一个Number。尝试:
return Number(a) - Number(b);

您的排序函数正在返回(转换为数字后)01。值0对应于sort中的"值相等"。

从本质上讲,这意味着如果它检查值54,就会告诉它5大于4,应该在后面。但如果它检查45,你就会告诉它它们是相等的。这是矛盾的,因此行为是未定义的,导致您看到的"随机"排序。

试试这个:

return a == b ? 0 : (a > b ? 1 : -1);