2009-08-31 2 views
10

Ich habe $ .Each verwendet, um Iterationen für eine Weile jetzt zu tun, aber ich höre immer noch Leute sagen, native JS für Schleifen zu verwenden. Ich bin sehr besorgt über die Leistung, aber ich bin mir nicht sicher, ob es immer möglich ist, $ .each für sinnvoll zu ersetzen.Ersetzen von jQuery jeweils mit

Also meine Fragen sind, ist es möglich, $ .each immer für zu ersetzen, und wenn nicht, was ist die Faustregel für wann es gemacht werden kann und wann nicht.

Ich habe ein jeder so:

$this.find("div.class").each(function(){ 
    var $thisparent = $(this).parent(); 

    if (condition) {   
    $(this).prepend($thisparent.text()); 
    } 

    if (condition2) {   
    $(this).prepend($thisparent.text()); 
    } 

}); 

Antwort

9

Dies ist, was jQuery funktioniert mit .each, grundsätzlich:

$.fn.each = function(callback) { 
    var i, length = this.length; 
    for(i = 0; i < length; ++i) { 
     callback.call(this[i]); 
    } 
}; 

So ist es nicht schwer, den Inhalt Ihrer anonymen Funktion durch den Aufruf callback.call zu ersetzen. Achten Sie darauf, this durch ein temporäres mit dem jQuery-Objekt zu ersetzen.

Konvertieren Ihrer gelieferten Code:

var foo = $this.find("div.class"), 
    fooLength = foo.length, 
    i, 
    $thisparent; 

for (i = 0; i < fooLength; ++i) { 
    $thisparent = $(foo[i]).parent(); 

    if (condition) {   
     $(foo[i]).prepend($thisparent.text()); 
    } 

    if (condition2) {   
     $(foo[i]).prepend($thisparent.text()); 
    } 
} 

Weitere (mögliche) Geschwindigkeit, Cache-foo[i] in eine temporäre. auch und weisen Sie $thisparent nur bei Bedarf zu. Wenn condition und sich gegenseitig ausschließen, verwenden Sie eine einzelne if (condition || condition2).

+0

Vielen Dank, aber können Sie bitte ein Beispiel geben? Danke. – Mark

+0

Vielen Dank, :) tolle Antwort und danke für mein Verständnis. Können Sie demonstrieren, wie man einen einzigen if verwendet? Auch wenn ich ein halbes Dutzend sich gegenseitig ausschließende Bedingungen habe. – Mark

+0

@Mark, Lesen Sie auf der || operator (https://developer.mozilla.org/de/Core_JavaScript_1.5_Reference/Operators/Logical_Operators). – strager