jQuery ordina gli elementi utilizzando l’ID dati

(scusa se la domanda esiste già)

Sono molto nuovo nello sviluppo di jQuery.

Ho una struttura HTML come segue:

Vorrei ordinarli come:

 

Sto usando la funzione

 function sortContacts() { var contacts = $('div.clist'), cont = contacts.children('div'); cont.detach().sort(function(a, b) { var astts = $(a).data('sid'); var bstts = $(b).data('sid') //return astts - bstts; return (astts > bstts) ? (astts > bstts) ? 1 : 0 : -1; }); contacts.append(cont); } 

Ma non funziona come previsto ..

Funziona bene per la prima volta ma quando aggiungi un nuovo elemento o modifica i dati, sid non funziona.

MODIFICARE:

dimostrazione

http://jsfiddle.net/f5mC9/1/

non funziona?

È ansible utilizzare la proprietà del dataset che memorizza tutti gli attributi data-* personalizzati di un elemento, restituisce una stringa, nel caso in cui si desideri convertire la stringa in un numero, è ansible utilizzare l’operatore parseInt o + .

 $('.clist div').sort(function(a,b) { return a.dataset.sid > b.dataset.sid; }).appendTo('.clist'); 

http://jsfiddle.net/CFYnE/

E sì, il tuo codice funziona qui, http://jsfiddle.net/f5mC9/

Modifica: Si prega di notare che IE10! e di seguito non supportano la proprietà .dataset , se vuoi supportare tutti i browser puoi invece usare il metodo .data() di jQuery:

 $('.clist div').sort(function(a,b) { return $(a).data('sid') > $(b).data('sid'); }).appendTo('.clist'); 
 $('.clist div').sort(function(a,b) { return a.dataset.sid > b.dataset.sid ? 1 : -1; //be carefull, string comparaison }).appendTo('.clist'); 

o forse

 $('.clist div').sort(function(a,b) { return parseInt(a.dataset.sid) - parseInt(b.dataset.sid); }).appendTo('.clist'); 

sort () gestisce i ritorni negativi / positivi;

Una funzione più generica per ordinare gli elementi usando jQuery:

 $.fn.sortChildren = function (sortingFunction: any) { return this.each(function () { const children = $(this).children().get(); children.sort(sortingFunction); $(this).append(children); }); }; 

Uso:

 $(".clist").sortChildren((a, b) => a.dataset.sid > b.dataset.sid ? 1 : -1);