2009-08-31 18 views
10

Używam $ .each do wykonywania iteracji na chwilę, ale wciąż słyszę, jak ludzie mówią, aby używać macierzystego JS do tworzenia pętli. Jestem bardzo zaniepokojony osiągami, ale nie jestem pewien, czy zawsze można zamienić $ .each na for w znaczący sposób.Zastępowanie jQuery każdy z dla

Moje pytania brzmią: czy zawsze można zastąpić $ .each tym, a jeśli nie, to jaka jest zasada, kiedy można to zrobić, a kiedy nie.

Mam każdy tak:

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

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

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

}); 

Odpowiedz

9

to co robi jQuery z .each, zasadzie:

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

Więc nie jest trudno zastąpić "zawartość" swojej anonimowej funkcji wywołaniem callback.call. Po prostu pamiętaj, aby zastąpić this tymczasowym z obiektem jQuery.

Konwersja kodu dołączonego:

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

uzyskać dodatkowe (potencjalnego) prędkości, cache foo[i] do tymczasowego. też i przypisz $thisparent tylko w razie potrzeby. Jeśli condition i condition2 wzajemnie się wykluczają, użyj pojedynczego if (condition || condition2).

+0

Wielkie dzięki, ale czy możesz podać przykład? Dzięki. – Mark

+0

Dziękuję bardzo, :) Świetna odpowiedź i podziękowania za zwiększenie mojego zrozumienia. Czy możesz pokazać, jak używać jednego, jeśli? Co jeśli mam pół tuzina wzajemnie wykluczających się warunków. – Mark

+0

@ Mark, Czytaj na || operator (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Logical_Operators). – strager

Powiązane problemy