Pregunta

¿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 hacer yo bucle a través de esto? each() puede ser utilizado para esto?

¿Fue útil?

Solución

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

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

Con esto en su lugar, usted puede hacer esto:

$('#myelement').data('test1','yay1')
               .data('test2','yay2')
               .data('test3','yay3');

$.each($('#myelement').allData(), function(key, value) {
    alert(key + "=" + value);
});

Se podía utilizar la sugerencia de Matt B, pero esto es como hacerlo con lo que tienes en este momento.

Otros consejos

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

Esto iterar a través de cada propiedad de objeto de datos 'esto' del elemento.

Probado con jQuery 1.4 y consejos de @ user292614 las siguientes obras:

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

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

No creo que haya ninguna función que le da todas las "claves" de los datos que han sido añadidos a la función data(), pero en su lugar, ¿por qué no poner todos los datos en la función debajo de un objeto / mAP?

algo como esto:

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

y luego cuando se desea 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);
}

he intentado esto, pero necesitaba algunos valores de datos adicionales. Si también tienes este "problema", entonces el siguiente debería funcionar.

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

, entonces solo puede extender con el valor id

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

Si usamos .data () significa que almacenar datos arbitrarios asociados con los elementos coincidentes o devolver el valor en el almacén de datos llamado así por el primer elemento en el conjunto de elementos emparejados.

y si .data () en bucle así que tenemos que acceder a ella misma manera en bucle así que para por ejemplo (a continuación)

<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 igual en todas las etiquetas, pero sus valores son diferentes, así que básicamente se genera bucle html así que tenemos que acceder en el mismo bucle manera es decir 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 que vuelva particular, <DIV>

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top