Question

Est-il possible de boucle à travers un objet data()?

Supposons que ceci est mon code:

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

Comment faire la boucle I à cela? Peut each() être utilisé pour cela?

Était-ce utile?

La solution

stocke jQuery toutes les informations données dans la variable interne jQuery.cache. Il est possible d'obtenir toutes les données associées à un objet particulier avec ce plugin simple mais utile:

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

Avec cela en place, vous pouvez faire ceci:

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

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

Vous pouvez simplement utiliser la suggestion de b mate mais comment faire avec ce que vous avez en ce moment.

Autres conseils

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

Cela itérer chaque propriété dans « ce » élément l'objet de données.

Testé avec jQuery 1.4 et des conseils de @ user292614 les travaux suivants:

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

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

Je ne pense pas qu'il y ait une fonction qui vous donne toutes les « clés » des données qui a été ajoutée à la fonction data(), mais plutôt, pourquoi ne pas mettre toutes vos données dans la fonction sous un objet / carte?

quelque chose comme ceci:

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

et puis quand vous voulez lire les données / itérer à travers elle:

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

Je viens d'essayer cela, mais besoin de quelques valeurs de données supplémentaires. Si vous avez aussi ce « problème », alors ce qui suit devrait fonctionner.

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

vous pouvez simplement étendre avec l'identifiant de valeur

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

Si l'on veut dire qu'il stocke des données arbitraires utilisons .data () associés aux éléments appariés ou renvoyer la valeur dans le magasin de données nommé pour le premier élément dans l'ensemble des éléments appariés.

et si .data () dans la boucle nous devons donc y accéder même manière dans la boucle afin de par exemple (ci-dessous)

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

Le code HTML dans ma boucle et data-today est le même dans tous les tags, mais leurs valeurs sont différentes, il est donc essentiellement boucle généré html donc nous avons accès à la boucle même manière i.e. dans js/jQuery pour exemple (below jQuery code)

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

OutPut :

Monday
Tuesday
Wednesday
Thursday

NOTE: console dans le navigateur, il retourne <DIV> particulier

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top