2012-10-16 11 views
8
  1. Czy te dwa fragmenty kodu robią identyczne rzeczy? Jeśli tak, to kiedy należy z niego korzystać? (Oprócz gdy trzeba coś zrobić z udziałem i lub value)Zapętlanie selektora jquery vs używanie funkcji każdy

    $("foo").each(function(i,value) { 
        $(this).empty(); 
    }); 
    

    vs.

    $("foo").empty(); 
    
  2. Ogólnie można przyjąć, że $("foo").someMethod() oznacza „run somemethod() na każdy element, który odpowiada selektor, z wyjątkiem przypadku, gdy nazwa metody to each? (tj. każdy jest przypadkiem specjalnym)

+1

Jeśli don” t potrzebujesz indeksu przedmiotu, który opróżniasz, nie musisz używać 'each() 'polecenie. Idź z krótszą składnią. – Lix

+1

@Lix: działa również szybciej: http://jsperf.com/jquery-selector-looping-vs-using-function-each – RASG

Odpowiedz

4

Zakładając, że masz na myśli funkcje magazynowe jQuery, tak, dwa fragmenty kodu są identyczne.

Powinieneś używać funkcji each(), jeśli chcesz pracować z indeksem, lub aby zapobiec długim łańcuchom funkcji.

Twoje zrozumienie $('foo').someMethod() jest prawdziwe w przypadku metod jQuery. Należy jednak pamiętać, że niektóre wtyczki mogą obsługiwać selektor w inny sposób lub wpływać tylko na pierwszy dopasowany element, na przykład.

+0

czy możesz opracować, w jaki sposób wtyczka może "zabrudzić" selektor jquery w taki sposób? (jeśli odnosiłeś się do $ ('')) – wal

+0

Nie "zanieczyszcza" selektora jako takiego, ale wtyczka może być w stanie obsługiwać tylko pierwszy dopasowany element, na przykład. – BenM

3

Tak, większość funkcji jQuery zaprojektowano w ten sposób.

Spójrz na przykład kodu:

$.fn.someMethod = function() { 
    return this.each(function() { 
     do_something(this); 
    }); 
}; 

Więc nawet można użyć .each ponownie, należy po prostu użyć:

$(selector).someMethod();

nie

$(selector).each(function() { 
    $(this).someMethod(); 
}); 
+0

Moje bieżące nokaut jquery nie rozumie znaczenia. czy możesz wyjaśnić część '$ .fn.someMethod'. – wal

+0

@wal Oznacza to umieszczenie metody na prototypie jQuery.Możesz sprawdzić niektóre artykuły, jak zrobić wtyczkę jQuery. – xdazz