Как сортировать LI по их идентификатору - PullRequest
5 голосов
/ 02 сентября 2010

Пробуем кучу решений без реальных результатов. У меня есть код, который принимает значение диапазона и создает идентификатор для LI. Затем я хочу отсортировать эти ЛИ по убыванию на основе идентификатора ЛИ. Помогите? Спасибо!

<!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 ]

11 голосов
/ 02 сентября 2010

Предположим, у ваших li nodes были идентификаторы.

<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/

4 голосов
/ 02 сентября 2010

jАнди избил меня до удара.Вот мое.

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

Я добавлю, что вам нужно

$(function() {

для ваших пользователей IE6, потому что IE6 вылетит, если вы попытаетесь удалить элементы из dom до загрузки их родительских элементов.

Кроме того, .remove () является избыточным, потому что .append () заботится об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...