2011-07-17 8 views
10

Estoy tratando de averiguar cómo puedo rastrear cómo se pueden ordenar los elementos en un jQuery. Digamos que tengo cuatro elementos (divs) en mi clasificación, cada uno tiene una identificación única. Llamémoslos # 100, # 200, # 300 y # 400 y se presentan en ese orden para comenzar. Pero cuando mueva # 100 para decir el número de spot 3, necesito poder guardar la nueva posición para esta identificación, pero también me aseguro de que los otros también tengan valores de posición actualizados.Mantenga un registro de las posiciones de todos los elementos en un ordenable jQuery

¿Tengo algún sentido? Básicamente quiero obtener las posiciones de cada identificación única, por lo que puedo guardar el orden de la lista para su uso posterior.

no he sido capaz de encontrar algo que se informa de todos los elementos de una ordenable, sólo para el que se ha movido ..

me punto en la dirección correcta? Gracias

Respuesta

25

Puede usar el evento stop que se le proporciona en orden para realizar un seguimiento de los elementos. Este es un pequeño ejemplo;

(function($) { 
    $('#sortable').sortable({ 
     stop: function(e, ui) { 
      console.log($.map($(this).find('li'), function(el) { 
       return el.id + ' = ' + $(el).index(); 
      })); 
     } 
    }); 
})(jQuery); 

Esto registra una matriz de todos los elementos en el ordenable con sus identificadores y sus índices actuales.

Aquí es un ejemplo de trabajo en jsFiddle así: http://jsfiddle.net/beyondsanity/HgDZ9/

+0

¡No hay problema! Se ha editado una pequeña mejora, usando "this" en lugar de "el", y usando this.id en lugar de $ (el) .attr ('id'), ya que este último no es necesario ya que no estamos encadenando . El violín sigue siendo el mismo que el ejemplo anterior para que pueda comparar los dos :) –

+0

Intenté su código actualizado, pero no está funcionando. ¿Algunas ideas? http://jsfiddle.net/LxMhF/2/ – INT

+0

Parece que cometí un error un poco, necesitamos el "el", ya que "this" dentro de $ .map es el objeto "ventana", no el elemento actual. "this" es el elemento actual en $ .fn.map ($ (selector) .map (fn)) tho, solo para dejar eso en claro. –

0

Posible duplicado de jQuery UI Sortable Position.

Básicamente, para obtener la posición de un elemento dentro de un ordenable (o simplemente un elemen padres a secas), simplemente algo así como

$('#300').index(); 

Este código volverá 2 si nada se ha movido (index() empieza a contar en cero) y actualizaciones cuando los elementos se vuelven a organizar.

Aquí hay una demostración: http://jsfiddle.net/XB5Dh/. Puede hacer clic en un elemento para ver su posición, y la nueva posición se muestra cuando arrastra un elemento.

2

De acuerdo con los documentos http://api.jqueryui.com/sortable/#method-toArray sugiero que utilice método integrado toArray. Ejemplo:

$(document).ready(function() { 
    $('#sortable').sortable({ 
     stop: function(e, ui) { 
     console.log($('#sortable').sortable('toArray')); 
     } 
    }); 
    $('#sortable').disableSelection(); 
    }); 
+0

esto es lo que necesito, gracias. –

Cuestiones relacionadas