如何根据他们的ID对LI进行排序

时间:2010-09-02 19:15:18

标签: jquery html sorting

尝试一堆没有可行结果的解决方案。我有代码获取跨度的值并为LI创建一个ID。然后我想根据LI的ID对这些LI的DESCENDING进行排序。救命?谢谢!

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<ul id="dumb">
    <li>cello<span>2987</span></li>
    <li>zello<span>1723</span></li>
    <li>aello<span>3476</span></li>
</ul>
<script type='text/javascript' src='JQUERY INCLUDE'></script> 
<script type="text/javascript"> 
$(document).ready(function() {
    $('ul li span').each(function(){
        var pubValue = $(this).html();
        $(this).parent().attr('id', pubValue);
    });
});
</script>
</body>
</html>

2 个答案:

答案 0 :(得分:11)

我们假设您的li nodes有ID。

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

然后你可以调用javascripts本机数组.sort()方法,因为jQuery包装集在Arrays中保存:

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

工作示例:http://www.jsfiddle.net/3uYUq/

答案 1 :(得分:4)

jAndy打败了我。这是我的。

$(function() {
  $("li").sort(function(left, right) {
    return parseInt($(left).attr("id")) - parseInt($(right).attr("id"));
  }).each(function() { $("ul").append($(this)); });
});

我会补充说你需要

$(function() {

对于您的IE6用户,因为如果您尝试在加载父元素之前从dom中删除元素,IE6将会崩溃。

此外,.remove()是多余的,因为.append()负责处理。