2010-09-02 4 views
5

Probieren Sie eine Reihe von Lösungen mit nicht praktikablen Ergebnissen. Ich habe Code, der den Wert der Spanne nimmt und eine ID für die LI erstellt. Ich möchte dann die DESCENDING dieses LI basierend auf der ID des LI sortieren. Hilfe? Vielen Dank!So sortieren Sie LI basierend auf ihrer 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

Nun, es gibt keine IDs. Meinten Sie, dass Sie nach Spanne Text sortieren möchten? – jAndy

+0

@jAndy: OP hat "Code, der den Wert der Spanne nimmt und eine ID für die LI erstellt". Siehe den vorhandenen Code. – BoltClock

+0

Nein, in meiner Beschreibung beschreibe ich, dass der Code in meinem Beispiel IDs basierend auf dem Wert des Bereichs erstellt. Danach möchte ich die LI's nach ihrer ID sortieren (sie haben natürlich zu diesem Zeitpunkt IDs). – joe

Antwort

10

Nehmen wir an, Ihre li nodes hatte Ids.

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

Dann könnten Sie nur javascripts nativen Array .sort() Methode aufrufen, da jQuery gewickelt Sätze halten, sind in Arrays:

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

Arbeitsbeispiel: http://www.jsfiddle.net/3uYUq/

+0

Das war perfekt, danke jAndy! – joe

+3

Anscheinend in Safari, brauchen Sie '-' anstelle von'> '. – user113716

+0

@patrick: interessant, also müssten Sie die Reihenfolge ändern, wenn Sie eine aufsteigende Liste haben möchten? – jAndy

4

JANDY schlug mich auf den Stempel. Hier ist meins.

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

Ich werde hinzufügen, dass Sie

$(function() { 

für Ihren IE6 Benutzer benötigen, weil IE6 stürzt ab, wenn Sie versuchen, bevor ihre Eltern Elemente Lastelemente aus dem Dom zu entfernen.

Auch .remove() ist redundant, da .append() das erledigt.

Verwandte Themen