jQuery按标签重新排序元素

时间:2013-06-05 00:07:53

标签: javascript jquery html

我目前正尝试按照与每个使用jQuery关联的rel="1234"标记重新排序无序的元素列表。

但是,我当前的代码导致输出没有出现,我无法解决原因。有人可以帮忙吗?

我的jQuery代码是:

$(function(){
    var elems = $('#test').children('li').remove();
    elems.sort(function(a,b){
        return parseInt(a.attr('rel')) > parseInt(b.attr('rel'));
    });
    $('#test').append(elems);
});

使用这样的基本标记:

<ul id="test">
    <li rel="4112">blub</li>
    <li rel="1422">blaaah</li>
    <li rel="6640">hmmmm</li>
    <li rel="2221">one more</li>
</ul>

http://jsfiddle.net/BQZHC/

3 个答案:

答案 0 :(得分:1)

试试这个: -

$(function(){
    var elems = $('#test').children('li'); // You dont need to remove the elements
    elems.sort(function(a,b){
         return +$(a).attr('rel') > +$(b).attr('rel'); // use attr on jquery object i.e $(a), $(b)
    });
    $('#test').append(elems); // This will take care of repositioning the elements.
});

Demo

答案 1 :(得分:0)

这就是你想要的

JS:

var elems = $('#test').children('li').remove();
elems.sort(function(a,b){
    return parseInt($(a).attr('rel'), 10) > parseInt($(b).attr('rel'), 10);
});
$('#test').html(elems);

请注意,sort函数的“a”和“b”元素应视为jQuery对象。您还应指定parseInt()

的基数

DEMO:http://jsfiddle.net/BQZHC/10/

答案 2 :(得分:0)

ab是DOM元素,而不是jQuery对象。

$()包装它们来制作jQuery对象,或使用getAttribute("rel")而不是.attr("rel")。它需要更长的时间,但需要更少的开销。


另外,假设你想要一个数字排序,我会使用减法。

return a.getAttribute("rel") - b.getAttribute("rel");

过去有些浏览器在返回布尔值时遇到了问题。