IE中的sort()函数

时间:2012-03-19 14:36:41

标签: javascript jquery

所以这段代码似乎不适用于IE,我没有找到任何说它不应该的东西。 我做错了什么?

 ​<ul id="cars">
    <li id="2">Ford</li>
    <li id="1">Volvo</li>
    <li id="3">Fiat</li>
    </ul>



var list = $('#cars').children('li');
    list.sort(function(a,b){
        return parseInt(a.id) < parseInt(b.id);
    });
    $('#cars').append(list);

2 个答案:

答案 0 :(得分:7)

您传入的排序函数应返回小于零的数字(a在b之前),0(a和b相等)或大于0(a在b之后)。

如果你这样做,它应该有效:

return parseInt(a.id) - parseInt(b.id);

也不会伤害传递给parseInt的radix参数,它有点安全:

return parseInt(a.id, 10) - parseInt(b.id, 10);

答案 1 :(得分:2)

在HTML4中,使用数字启动ID是不正确的。这很少会导致浏览器出现问题,但也很容易避免。

我用data-属性替换了您的ID,这些属性由jQuery中的.data()方法自动提取并转换为数字,从而无需parseInt

HTML:

<ul id="cars">
    <li data-val="2">Ford</li>
    <li data-val="1">Volvo</li>
    <li data-val="3">Fiat</li>
</ul>

JS:

$('#cars').children('li').sort(function(a, b) {
    return $(a).data('val')-$(b).data('val');
}).appendTo('#cars');​​​​​
​

小提琴:http://jsfiddle.net/qaytJ/1/

每当您想要将任意数据附加到HTML元素时,

data-属性就非常有用,并且它比强制idclass更“正确”,或者至少更合适一项不打算做的工作。经常使用它们。