Frage

Ist es möglich, eine Schleife durch ein data() Objekt?

Angenommen, dies ist mein Code:

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

Wie kann ich eine Schleife durch das? Kann each() dafür verwendet werden?

War es hilfreich?

Lösung

jQuery speichert alle Dateninformationen in der jQuery.cache internen Variable. Es ist möglich, alle Daten mit einem bestimmten Objekt mit diesem einfachen, aber hilfreich Plugin verbunden zu bekommen:

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

diese mit an Ort und Stelle, können Sie dies tun:

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

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

Sie könnten nur matt b Vorschlag verwenden, aber das ist, wie es mit dem zu tun, was Sie jetzt haben.

Andere Tipps

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

Dies wird in ‚diesem‘ Element des Datenobjekts durch jede Eigenschaft laufen.

Getestet mit jQuery 1.4 und Tipps von @ user292614 folgenden Werken:

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

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

Ich glaube nicht, dass es eine Funktion ist, dass Sie alle den „Schlüssel“ der Daten, die mit der data() Funktion hinzugefügt wurde, gibt, sondern, warum nicht alle Ihre Daten in die Funktion unter einem Objekt setzen / map?

so etwas wie folgt aus:

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

und dann, wenn Sie die Daten lesen wollen / durchlaufen sie:

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

ich das gerade versucht, aber benötigt einige zusätzliche Datenwerte. Wenn Sie auch dieses „Problem“ bekommen dann soll die folgende arbeiten.

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

dann können Sie einfach mit dem Wert ID verlängern

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

Wenn wir verwenden .data () bedeutet, dass es mit den angepassten Elementen zugeordnet beliebige Daten speichern oder den Wert an dem genannten Datenspeicher für das erste Element in dem Satz von abgestimmten Elementen zurück.

und wenn .data () in einer Schleife so müssen wir es gleiche Art und Weise in der Schleife Zugriff so für z (unten)

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

Der HTML-Code in meiner Schleife und data-today ist das gleiche in allen Tags, aber ihre Werte unterscheiden sich also im Grunde ist es Schleife erzeugt html so haben wir in gleicher Weise d.h Schleife in js/jQuery zuzugreifen, beispielsweise für (below jQuery code)

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

OutPut :

Monday
Tuesday
Wednesday
Thursday

Hinweis: In-Browser-Konsole es insbesondere <DIV> zurückkehren

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top