2011-11-24 17 views
13

en la devolución de llamada de "actualización" puede obtener el orden de los elementos con $(this).sortable('toArray');datos personalizados en jQuery ordenable?

Pero esta orden contiene los ID del elemento.

¿Cómo puedo obtener un atributo personalizado, como data-myattr? Quiero que el fin de contener los valores de esta attibute en lugar de identificadores ....

$('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); 

     .... 

    } 
    }); 

El HTML es simple:

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

Esto probablemente debería ser una solicitud de función jQuery UI ... –

+0

Ok, he leído el código y en realidad está implementado ahora! Por favor vota mi respuesta a continuación. –

Respuesta

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

gracias, funciona, pero ¿por qué arr.length - 1? Necesito ese último elemento también :) – Alex

+0

Creo que tenía un elemento ficticio en mi script JSBin, lo he eliminado. –

+1

el único inconveniente es que si no tiene ningún atributo de identificación en los elementos, esto no funcionará :) – KnF

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

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

JS violín here

+1

no está relacionado con lo que pregunté :) – Alex

+1

@Alper Realmente espero que nunca recomiende el uso de 'datos' más tiempo ... como puede ver en esta prueba unitaria (http://jsperf.com/jquery-data-vs -jqueryselection-data/8) los datos son lentos ... use prop porque es más rápido (o js nativo que es aún más rápido). – HellBaby

32

Como de agosto '12, esto se implementa directamente en jQuery UI:

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

¡¡esto está realmente funcionando !! ¡Gracias! – KnF

Cuestiones relacionadas