2011-11-24 15 views
13

sul callback "aggiornamento" è possibile ottenere l'ordine degli elementi con $(this).sortable('toArray');Dati personalizzati in jQuery ordinabili?

Ma questo ordine contiene gli ID di elemento.

Come posso ottenere un attributo personalizzato, ad esempio data-myattr? Voglio che per contenere i valori di questa attibute invece di ID ....

$('ul').sortable({ 
    handle: 'h2' 
    items: 'li', 
    context: this, 
    update: function(){   

     var order = $(this).sortable('toArray'); 

     // here I want a array of values from my attribute, not ID values... 
     alert(order); 

     .... 

    } 
    }); 

L'HTML è semplice:

<ul> 
    <li data-myattr="a-1" id="whatever"> 
    ... 
    </li> 
    ... 
+0

Questa dovrebbe probabilmente essere una richiesta della funzione dell'interfaccia utente jQuery ... –

+0

Ok, ho letto il codice ed è attualmente implementato! Si prega di invitare la mia risposta in basso. –

risposta

3
$("ul").sortable({ 
    . 
    . 
    . 
    update: function(event, ui) {   
    var arr = $(this).sortable('toArray'); 
    var i, n; 
    var attrs = []; 
    for (i = 0, n = arr.length; i < n; i++) { 
     attrs.push($('#' + arr[i]).data('myattr')); 
    } 

    alert(attrs); 
    } 
}); 
+1

grazie funziona, ma perché arr.length - 1? Ho bisogno anche di quell'ultimo elemento :) – Alex

+0

Penso di avere un elemento fittizio nel mio script JSBin: l'ho rimosso. –

+1

l'unico lato negativo è che se non si dispone di un attributo ID sugli elementi questo non funzionerà :) – KnF

0
$("li").data("myattr") // if you use jQuery, >= 1.4.3 

$("li").attr("data-myattr") // for erlier 

JS Fiddle here

+1

non correlato a quello che ho chiesto :) – Alex

+1

@Alper Spero davvero che tu non raccomandi mai che 'data' usi anylonger ... come puoi vedere su questo unit test (http://jsperf.com/jquery-data-vs -jqueryselection-data/8) i dati sono lenti ... usa il prop perché è più veloce (o js nativo che è ancora più veloce). – HellBaby

32

Come di agosto '12, questo è implementato direttamente nell'interfaccia utente di jQuery:

var order = $(this).sortable('toArray', {attribute: 'data-myattr'}); 
+0

funziona davvero !! Grazie! – KnF

Problemi correlati