2010-09-02 3 views
5

Попытка создания множества решений без каких-либо результатов. У меня есть код, который принимает значение span и создает идентификатор для LI. Затем я хочу отсортировать эти LI DESCENDING на основе идентификатора LI. Помогите? Благодаря!Как отсортировать LI на основе их ID

<!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> 
+0

ну, нет идентификаторов. Вы имели в виду, что хотите отсортировать по диапазону текста? – jAndy

+0

@jAndy: OP имеет «код, который принимает значение span и создает идентификатор для LI». См. Существующий код. – BoltClock

+0

Нет, в моем описании я описываю, что код, уже приведенный в моем примере, создает идентификаторы, основанные на значении span. После этого я хочу сортировать LI по их идентификатору (у них, конечно, есть идентификаторы в этот момент). – joe

ответ

10

Предположим, что ваш 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/

+0

Это было прекрасно, спасибо jAndy! – joe

+3

Очевидно, что в Safari вам нужно '-' вместо'> '. – user113716

+0

@patrick: интересно, так что вам нужно будет изменить порядок, если вы хотите иметь восходящий список? – jAndy

4

JANDY бил меня к удару. Вот моя.

$(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() позаботится об этом.

Смежные вопросы