5

这个对我的链接进行排序的功能在 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>

脚本

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(单击“流派”按钮)

4

2 回答 2

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;
});

小提琴

于 2013-07-08T00:10:57.790 回答
0

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

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

JS 排序的可能副本在 Firefox 中有效,但在 IE 中无效 - 无法找出原因

于 2013-07-08T00:20:42.333 回答