0

我有这部分功能按数字对元素进行排序。此数字取自data-ranking要排序的元素的属性:

$(".tab_entry").sort(function(a,b){
    return parseFloat(a.dataset.ranking) < parseFloat(b.dataset.ranking)
}).appendTo('div.active');

现在的问题是:这在 Firefox 24 上完美运行,但在 Chrome 28 上却不行(排序失败,顺序错误),并且在 Safari 5.1.7 和 IE 10 上没有任何作用。

有没有人得到解决方案?

4

2 回答 2

1

jQuery 的 API 中没有列出排序函数。

您可能需要先将元素转换为数组,以便使用浏览器的原生排序功能:

var sortedArray = $(".tab_entry").toArray().sort(function(a,b){ ... })

此外(也许更重要的是),排序函数应该返回一个数字,而不仅仅是真/假:Array.prototype.sort

function(a,b) {
    //Return the difference in the rankings.
    //May need to switch the terms depending on what ordering you want.
    return parseFloat(a.dataset.ranking) - parseFloat(b.dataset.ranking)
}
于 2013-10-09T04:02:24.030 回答
0

尝试:

return parseFloat(a.dataset.ranking) - parseFloat(b.dataset.ranking);

a如果小于,这将返回一个负数b,它将放在a前面b,反之亦然。如果两个值相等,它将返回0并且顺序将保持不变,因为排序不稳定。

于 2013-10-09T04:04:00.440 回答