我正在尝试按照以下方式对IE8中的列表元素数组进行排序:
function comparator(params) {
var keepSelectedOnTop = params.keepSelectedOnTop;
return function (a, b) { // a, b are DOM objects
a = $(a); // wrap with jQuery
b = $(b);
if (keepSelectedOnTop) {
if (a.is(".selected") && !b.is(".selected")) {
return -1;
} else if (!a.is(".selected") && b.is(".selected")) {
return 1;
}
}
return a.text().localeCompare(b.text());
}
}
// ...
var items = $("ul li").detach().toArray();
items.sort(comparator(params));
这适用于小型列表,但是当我有很多元素时,我会收到undefined is null or not an object
错误。当我在分配后使用调试器b
为undefined
时打破异常。
有没有人遇到过这个?它在其他浏览器中工作正常,它似乎是完全有效的JS。
P.S。 jQuery版本是1.7.2
答案 0 :(得分:1)
为什么要排序?
var items = $("ul li")
items = [].concat(items.filter(".selected").toArray()
,items.filter(":not(.selected)").toArray())
答案 1 :(得分:0)
经过几次试验和试验错误尝试似乎更改比较器中的分配解决了问题,但它没有意义:
function comparator(params) {
var keepSelectedOnTop = params.keepSelectedOnTop;
return function (aDom, bDom) {
var a = $(aDom), b = $(bDom); // Use different vars for the wrappers
if (keepSelectedOnTop) {
if (a.is(".selected") && !b.is(".selected")) {
return -1;
} else if (!a.is(".selected") && b.is(".selected")) {
return 1;
}
}
return a.text().localeCompare(b.text());
}
}
出于某种原因,上述工作原理,但我在参数中重新分配不同值的初始版本没有。