我一直盯着这段javascript代码,我需要一些帮助。
这是一个不区分大小写的排序函数,可以正确处理特殊(丹麦语)字符,但是它拒绝在IE7中工作,我看不出它为什么不能工作的任何原因。这不是那种花哨......
function _compare(a, b) {
var sortorder = " 0123456789.abcdefghijklmnopqrstuvwxyzæøå",
min = 0,
idx = 0,
c = 0;
a = ' ' + a;
b = ' ' + b;
a = a.substring(1).toLowerCase();
b = b.substring(1).toLowerCase();
min = Math.min(a.length, b.length);
while (idx < min && a[idx] == b[idx]) {
idx++;
}
if (idx == min) {
if (a.length > b.length) {
c = 1;
}
else if (a.length < b.length) {
c = -1;
}
}
else {
c = (sortorder.indexOf(a[idx]) > sortorder.indexOf(b[idx])) ? 1 : -1;
}
return c;
}
var key, ar = [];
ar.push("TEST");
ar.push("abcd");
ar.push("test");
ar.push("øæå!");
ar.push("oåø!");
ar.push("åæø!");
ar.push("aaø!");
ar.sort(_compare);
for (key in ar) {
$("pre").append(ar[key] + "<br />");
}
http://jsfiddle.net/hpvek/ - 它在FF,Chrome,IE8-9和Safari中都有效。 IE7(可能的IE6,我在我的测试武器库中没有)似乎是个奇怪的人。
感谢您的帮助。
答案 0 :(得分:1)
for (key in ar) {
$("pre").append(ar[key] + "<br />");
}
如果要保留顺序,这是迭代数组的错误方法。
尽管如此,这似乎不是问题所在。
天哪,很简单。 IE不支持处理像数组这样的字符串。您必须将它们转换为数组才能查找idx
索引或使用charAt。