w3schools objects for ejemplos array jquery loops each

objects - jquery each break



jQuery loop a través del objeto data() (6)

¿Es posible recorrer un objeto data() ?

Supongamos que este es mi código:

$(''#mydiv'').data(''bar'',''lorem''); $(''#mydiv'').data(''foo'',''ipsum''); $(''#mydiv'').data(''cam'',''dolores'');

¿Cómo puedo recorrer esto? ¿Se puede usar each() para esto?


Lo intenté pero necesitaba algunos valores de datos adicionales. Si también tienes este "problema", entonces lo siguiente debería funcionar.

$(''#mydiv'').data(''bar'', {name:''lorem'', id:''156'', price:''199''});

entonces simplemente puede extender con el valor id

$.each( $(''#mydiv'').data(),function(i, e) { alert(''name=''+ i + '' name='' +e.name + '' id=''e.id + '' price='' + e.price ); });


No creo que haya ninguna función que le proporcione todas las "claves" de los datos que se han agregado con la función data() , sino que, por el contrario, ¿por qué no poner todos sus datos en la función debajo de un objeto / ¿mapa?

algo como esto:

var container = new Object(); container.bar = "lorem"; container.foo = "ipsum"; container.cam = "dolores"; $("mydiv").data("container", container);

y luego cuando quieras leer los datos / iterar a través de él:

var blah = $("mydiv").data("container"); for(key in blah) { var value = blah[key]; //do whatever you want with the data, such as: console.log("The value of ", key, " is ", value); }


Probado con jQuery 1.4 y consejos de @ user292614 los siguientes trabajos:

$(''#mydiv'').data(''bar'',''lorem''); $(''#mydiv'').data(''foo'',''ipsum''); $(''#mydiv'').data(''cam'',''dolores''); $.each( $(''#mydiv'').data(),function(i, e) { alert(''name=''+ i + '' value='' +e); });


Si usamos .data () significa que almacena datos arbitrarios asociados con los elementos coincidentes o devuelve el valor en el almacén de datos nombrado para el primer elemento en el conjunto de elementos coincidentes.

y si .data () está en el bucle, entonces tenemos que acceder de la misma manera en el bucle, por ejemplo, para (por ejemplo)

<p class="weekday" data-today="monday">Monday</p> <p class="weekday" data-today="tuesday">Tuesday</p> <p class="weekday" data-today="wednesday">Wednesday</p> <p class="weekday" data-today="thursday">Thursday</p>

El html en mi bucle y data-today es el mismo en todas las etiquetas, pero sus valores son diferentes, así que básicamente es html generado por bucle, así que tenemos que acceder de la misma manera, es decir, bucle en js/jQuery por ejemplo (below jQuery code)

$(''.weekday'').each(function(){ $(this).data(''today''); });

OutPut :

Monday Tuesday Wednesday Thursday

NOTA: en la consola del navegador devuelve un <DIV> particular.


jQuery almacena toda la información de datos en la variable interna jQuery.cache. Es posible obtener todos los datos asociados con un objeto particular con este plugin simple pero útil:

jQuery.fn.allData = function() { var intID = jQuery.data(this.get(0)); return(jQuery.cache[intID]); };

Con esto en su lugar, puede hacer esto:

$(''#myelement'').data(''test1'',''yay1'') .data(''test2'',''yay2'') .data(''test3'',''yay3''); $.each($(''#myelement'').allData(), function(key, value) { alert(key + "=" + value); });

Podrías simplemente usar la sugerencia de matt b, pero esta es la forma de hacerlo con lo que tienes ahora.


$.each($.data(this), function(i, e) { alert(''name=''+ i + '' value='' +e); });

Esto iterará a través de cada propiedad en el objeto de datos del elemento ''this''.