Domanda

E 'possibile collegare attraverso un oggetto data()?

Supponiamo che questo è il mio codice:

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

Come faccio a ciclo attraverso questo? Può each() essere utilizzato per questo?

È stato utile?

Soluzione

negozi di jQuery tutte le informazioni dei dati nella variabile interna jQuery.cache. È possibile ottenere tutti i dati associati con un particolare oggetto con questa semplice ma utile plugin:

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

Con questo in luogo, si può fare questo:

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

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

Si può solo usare il suggerimento di matt b ma questo è come farlo con quello che hai in questo momento.

Altri suggerimenti

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

Questo scorrere ogni proprietà in oggetto dati 'questo' elemento di.

Testato con jQuery 1.4 e suggerimenti da @ user292614 le seguenti opere:

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

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

Non credo che ci sia una funzione che ti dà tutte le "chiavi" dei dati che sono stati aggiunti con la funzione data(), ma, invece, perché non mettere tutti i dati in funzione in un oggetto / mappa?

qualcosa di simile:

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

e poi quando si desidera leggere i dati / scorrere attraverso di essa:

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);
}

Ho appena provato questo, ma bisogno di alcuni valori di dati in più. Se anche hai questo "problema", quindi la seguente dovrebbe funzionare.

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

allora si può semplicemente estendere con il valore id

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

Se usiamo .data () significa che memorizzare dati arbitrari associati con gli elementi corrispondenti o restituire il valore al deposito dati denominato per il primo elemento nella serie di elementi accoppiati.

e se .data () nel ciclo in modo abbiamo accedervi stesso modo in loop così per es (sotto)

<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>

Il codice HTML nel mio ciclo e data-today è lo stesso in tutti i tag ma i loro valori sono diversi in modo sostanzialmente è generato ciclo html quindi dobbiamo per accedere in maniera stesso loop cioè in js/jQuery per esempio (below jQuery code)

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

OutPut :

Monday
Tuesday
Wednesday
Thursday

NOTA: nel browser console è tornare particolare <DIV>

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top