2010-09-02 13 views
5

Probando un montón de soluciones sin resultados viables. Tengo un código que toma el valor del tramo y crea una identificación para el LI. Luego quiero ordenar el DESCENDING de estos LI según la ID de LI. ¿Ayuda? ¡Gracias!Cómo ordenar los LI según su 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

bien, no hay identificadores. ¿Querías decir que quieres ordenar por texto? – jAndy

+0

@jAndy: OP tiene un "código que toma el valor del tramo y crea una ID para el LI". Ver el código existente. – BoltClock

+0

No, en mi descripción describo que el código que ya está en mi ejemplo crea ID en función del valor del tramo. Después de eso, quiero ordenar los LI por su ID (por supuesto que tendrán identificaciones en ese punto). – joe

Respuesta

10

Supongamos que su li nodes tenía identificadores.

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

entonces se podría simplemente llamar a javascript nativo método de arreglos .sort(), ya jQuery envuelto conjuntos son asimiento en Arrays:

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

Ejemplo de trabajo: http://www.jsfiddle.net/3uYUq/

+0

Eso fue perfecto, gracias jAndy! – joe

+3

Aparentemente en Safari, necesitas '-' en lugar de'> '. – user113716

+0

@patrick: interesante, ¿entonces necesitarías cambiar el orden si quieres tener una lista ascendente? – jAndy

4

Jandy me ganó de mano. Aquí está el mío.

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

voy a añadir que necesita

$(function() { 

para sus usuarios de IE6 porque IE6 se bloqueará si se intenta eliminar los elementos del DOM antes de su carga de elementos primarios.

Además, .remove() es redundante porque .append() se ocupa de eso.

Cuestiones relacionadas