ciclo jQuery attraverso i dati () dell'oggetto
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?
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>