Durch Elementarray iterieren
Can
- javascript
0 dave0 Can0 1UnitedPower0 dave
0 1UnitedPower
Hallo Leute,
ich habe folgenden Code:
var elements = $(".elements", "#elementsContainer");
for(var i=0; i<elements.length, i++){
console.log(
$(elements[i]).text();
)
}
Was mir nicht gefällt ist das, was in der console.log steht:
$(elements[i]).text()
Ich habe die Elemente ja bereits in der variable elements selektiert. Warum muss ich denn noch einmal das JQuery Zeichen davor setzen? Das sollte doch reichen: elements[i].text()
Danke im voraus
Hi,
warum iterierst du nicht mittels .each() über die Elemente und greifst mittels $(this) darauf zu?
~dave
Hi,
warum iterierst du nicht mittels .each() über die Elemente und greifst mittels $(this) darauf zu?
~dave
weil for performanter ist als each. Es sind zwar in meinem Anwendungsbeispiel nur millisekunden, aber trotzdem.
weil for performanter ist als each.
In dem Fall nicht. Weil du nicht drumherum kommst bei jeder Iteration das DOM-Element wieder mit jQuery zu wrappen und ein jQuery-Aufruf ist recht teuer.
Wenn Performanz für dich so wichtig ist, solltest du im übrigen folgende Schleifennotation verwenden:
for (var i=0,l=foo.length; i<l; i++);
So muss nicht bei jeder Iteration in der Prototypkette von "foo" nach "length" gesucht werden.
Wenn Performanz für dich so wichtig ist, solltest du im übrigen folgende Schleifennotation verwenden:
for (var i=0,l=foo.length; i<l; i++);
So muss nicht bei jeder Iteration in der Prototypkette von "foo" nach "length" gesucht werden.
Das ist ein cooler Tipp, danke! :)
Ich habe ausserdem gelesen, dass ++i schneller ist als i++...
Weiss jemand etwas davon?
Hi,
wenn dir performance so wichtig ist, dass du eine Optimierung an dieser Stelle für nötig hältst, warum verwendest du jQuery?
~dave
var elements = $(".elements", "#elementsContainer");
for(var i=0; i<elements.length, i++){
console.log(
$(elements[i]).text();
)
}
jQuery liefert kein Javascript-Array zurück, sondern jQuery-Objekte. Du iterierst also nicht über die gematchten Elemente, sondern über die Eigenschaft eines Objekts.
> ~~~javascript
>
> var elements = $(".elements", "#elementsContainer").toArray();
> for(var i=0; i<elements.length, i++){
> console.log(
> $(elements[i]).text();
> )
> }
>
elements enthält dein ein Array mit DOM-Elementen. Um die jQuery Funktionalitäten nutzen zu können musst du die einzelnen Elemente allerdings weiterhin mit jQuery wrappen.
Sorry, so ists besser:
var elements = $(".elements", "#elementsContainer").toArray();
for(var i=0; i<elements.length, i++){
console.log( $(elements[i]).text() );
}
Jetzt aber:
var elements = $(".elements", $("#elementsContainer")).toArray();
for(var i=0; i<elements.length; i++){
console.log( $(elements[i]).text() );
}