Tengo dos listas ordenadas una al lado de la otra.Uso de jQuery para insertar dinámicamente en la lista alfabéticamente
Cuando saco un nodo de una lista, quiero insertarlo alfabéticamente en la otra lista. El problema es que quiero sacar solo un elemento y colocarlo nuevamente en la otra lista sin actualizar toda la lista.
Lo extraño es que cuando inserto en la lista de la derecha, funciona bien, pero cuando vuelvo a insertar en la lista de la izquierda, la orden nunca sale bien.
También intenté leer todo en una matriz y ordenarla allí por si el método children() no devuelve las cosas en el orden en que se muestran, pero sigo obteniendo los mismos resultados.
Aquí es mi jQuery:
function moveNode(node, to_list, order_by){
rightful_index = 1;
$(to_list)
.children()
.each(function(){
var ordering_field = (order_by == "A") ? "ingredient_display" : "local_counter";
var compA = $(node).attr(ordering_field).toUpperCase();
var compB = $(this).attr(ordering_field).toUpperCase();
var C = ((compA > compB) ? 1 : 0);
if(C == 1){
rightful_index++;
}
});
if(rightful_index > $(to_list).children().length){
$(node).fadeOut("fast", function(){
$(to_list).append($(node));
$(node).fadeIn("fast");
});
}else{
$(node).fadeOut("fast", function(){
$(to_list + " li:nth-child(" + rightful_index + ")").before($(node));
$(node).fadeIn("fast");
});
}
}
Esto es lo que se ve mi HTML como:
<ol>
<li ingredient_display="Enriched Pasta" ingredient_id="101635" local_counter="1">
<span class="rank">1</span>
<span class="rounded-corners">
<span class="plus_sign"> + </span>
<div class="ingredient">Enriched Pasta</div>
<span class="minus_sign"> - </span>
</span>
</li>
</ol>
¿Ha intentado utilizar el depurador para recorrer su código y asegurarse de que su función de devolución de llamada (...) se comporte correctamente? Firebug o las herramientas de desarrollador IE8 funcionan muy bien para esto. Puede poner un punto de interrupción en el cuerpo de su devolución de llamada. – RMorrisey
miré w3c. No puedo encontrar ninguna mención de los atributos 'ingredient_display',' ingredient_id' o 'local_counter'. aparte de eso, este es un html horrible. Espero que esto no entre en producción en algún lado: \ – Jason
He pisado Firebug y por alguna razón no regresan en el orden correcto para una de las listas ordenadas.Tal vez debería ir por getElementById en su lugar. @jason, esto no es para producción. Esos son atributos definidos por el usuario. ¿Cómo recomendarías arreglar esto? – Dex