使用jQuery排序,删除和追加元素在IE中不起作用

时间:2013-07-07 22:52:47

标签: javascript jquery internet-explorer sorting

此功能可以对我的链接进行排序,就像Chrome / Safari / Firefox上的魅力一样,但在IE中则不然。有人可以告诉我为什么吗?

症状:一切都消失了(第2行)没有出现任何内容(第3行)

HTML:

 <div class="genres">
   <a title="90 items" href="?genre=absurdism"><span>absurdism</span></a>
   <a title="83 items" href="?genre=action"><span>action</span></a>
   <a title="322 items" href="?genre=adult"><span>adult</span></a>
   <a title="2974 items" href="?genre=adventure"><span>adventure</span></a>
   <a title="106 items" href="?genre=about+comics"><span>about comics</span></a>
 </div>

SCRIPT

sorted = $('.genres a').sort(function(a, b) {
    return a.innerHTML > b.innerHTML
});
$('.genres').html('');
sorted.each(function(i, a) {
    $('.genres').append(a)
});

小提琴:http://jsfiddle.net/MWkJg/2/

此代码的在线页面位于http://www.lambiek.net/webshop.html(点击“流派”按钮)

2 个答案:

答案 0 :(得分:4)

你需要替换它:

$('.genres').html('');

$('.genres').empty();

html使用innerHTML属性删除内容,这在浏览器中处理不一致,如您所见。但是,empty使用removeChild方法,并在浏览器中保持一致。 (顺便说一句,jQuery 2.0使用textContent。)

此外,要使sort方法始终如一地工作,它需要返回一个数值:

var sorted = $('.genres a').sort(function(a, b) {
    return a.innerHTML < b.innerHTML ? -1 :
            a.innerHTML === b.innerHTML ? 0 :
            1;
});

<强> FIDDLE

答案 1 :(得分:0)

尝试使传递给sort方法的比较函数返回一个数字而不是布尔值,即

if (a.innerHTML > b.innerHTML) { return 1; };

JS sort works in Firefox but not IE - can't work out why可能重复。