jQuery似乎随机排序元素

时间:2012-02-08 02:17:47

标签: javascript jquery sorting

我正在尝试对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。但是在我运行排序的UI中,元素随机出现。如果我重复执行此代码,它会随机化订单。我可以在调试控制台中通过查看数据库都没有按顺序验证这一点。

我在goog上找不到关于这里可能发生的事情的任何参考。我明天会深入研究jQuery,但我想我会把它扔出去。 jQuery 1.4.2(是啊..)谢谢!

2 个答案:

答案 0 :(得分:3)

传递给Array.prototype.sort的回调应该返回Number。尝试:

return Number(a) - Number(b);

答案 1 :(得分:2)

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

基本上,这意味着如果它检查值54,则告诉它5大于4并且应该继续。但是,如果它检查45,则告诉它它们是平等的。这是矛盾的,因此行为未定义,导致您看到的“随机”排序。

试试这个:

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