Can: Durch Elementarray iterieren

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

  1. Hi,

    warum iterierst du nicht mittels .each() über die Elemente und greifst mittels $(this) darauf zu?

    ~dave

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

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

        1. 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! :)

        2. Ich habe ausserdem gelesen, dass ++i schneller ist als i++...
          Weiss jemand etwas davon?

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

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

    1. Sorry, so ists besser:

        
        
       var elements = $(".elements", "#elementsContainer").toArray();  
       for(var i=0; i<elements.length, i++){  
          console.log( $(elements[i]).text() );  
       }  
       
      
      1. Jetzt aber:

          
        var elements = $(".elements", $("#elementsContainer")).toArray();  
        for(var i=0; i<elements.length; i++){  
            console.log( $(elements[i]).text() );  
        }