问题是我有一个包含联系人的列表,当有人更改他/她的状态时,我尝试将他们移动到列表的顶部。到目前为止一切正常,IE9,Firefox 4 不工作。我向您展示代码:
function sortByStatus()
{
var divs = getElementsByClassName(document,"status_sort");
divs.sort(compare);
for (var i = 0; i < divs.length; i++)
{
$("#contact_info").append(divs[i]);
}
}
function compare(div1, div2)
{
var id1 = div1.getAttribute("id");
var id2 = div2.getAttribute("id");
if (id1 > id2)
return 1;
else if (id1 < id2)
return -1;
else
return 0;
}
有什么想法或可能的解决办法吗?谢谢。
更新
我已经尝试过 MrBuuBuu 解决方案,它可以正常工作,因为现在按状态排序可以工作,但字母排序不起作用。我必须更改 MrBuuBuu 解决方案的一部分,即比较函数,因为我将联系人的姓名与代表状态的姓名之前的数字进行比较(例如 2John ,2 表示离线,1 表示在线),所以我必须进行比较与 '<' 和 '>' 并返回 1、-1 或 0。
但最糟糕的是,现在它不适用于 IE7 或 IE8...按状态排序不起作用。
真的很奇怪,有什么想法吗?
最佳答案
document.getElementsByClassName 返回 NodeList,而不是数组。所以你必须先将其转换为数组。我还清理了你的compare()函数。
function compare(div1, div2)
{
var id1 = div1.id;
var id2 = div2.id;
if (id1 < id2) {
return - 1;
}
if (id1 == id2) {
return 0;
}
return 1;
}
function sortByStatus()
{
var divs = document.getElementsByClassName("status_sort");
var divArray = $.map(divs, function(div) { return div; });
divArray.sort(compare);
$.each(divArray, function(i, div){
$("#contact_info").append(div);
});
}
关于Javascript 排序不适用于 IE9?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428236/