2011-07-07 12 views
74

Jaka jest różnica między tym:

$.each($('#myTable input[name="deleteItem[]"]:checked').do_something()); 

a to:

$('#myTable input[name="deleteItem[]"]:checked').each(function() { do_something }); 

HTML dla komórka tabeli, który jest wybrany i działania wygląda następująco:

<td width="20px"><input type="checkbox" class="chkDeleteItem" name="deleteItem[]" value="' . $rowItem['itemID'] . '" /></td> 

Poszedłem nad dokumentacją jQuery, ale wciąż nie zrozum różnicę. (Czy to ja, czy to, że dokumentacja czasami lekko „mgliste” w jasności treści?)

Dodane Info:

Widocznie moja próba rodzajowe przykładów jest mylące ludzie! Wraz z (poprzednio) brakującym nawiasem w pierwszym przykładzie. :(

Pierwszy przykład pochodzi z wiersza w moim kodu, który usuwa <TBODY> żadnych wierszy z wyboru, która jest sprawdzana:

$.each($('#classesTable input[name="deleteClasses[]"]:checked').parent().parent().parent().remove()); 

Drugi przykład pochodzi z sytuacji, gdy patrzę przez #classesTable dla dowolnego wyboru sprawdzone i usunąć jego element pasujący w menu.

$('#classesTable input[name="deleteClasses[]"]:checked').each(function(){ 
    $('#classesList option[value="' + $(this).attr('value') + '"]').remove(); 
}); 

rozumiem, że robią dwie różne rzeczy, ale nie do tego stopnia, że ​​będę w stanie powiedzieć „muszę korzystać $ .each() w tys to case i .each (function() {}) w innym przypadku.

Czy w ogóle są wymienne? Tylko w niektórych przypadkach? Nigdy?

+0

W pierwszym przykładzie kodu brakuje nawiasu zamykającego. – tjollans

+0

Komentarz i przecinek, zobacz moją odpowiedź na przykład. – StuperUser

+0

Zamiar pierwszego przykładu można interpretować na kilka różnych sposobów. Popraw to, aby odzwierciedlało to, co faktycznie robisz. – user113716

Odpowiedz

93

Opis

.each jest iteracyjnej, która jest używana w celu przechodzenia tylko jQuery zbiór obiektów podczas jQuery.each ($.each) jest ogólnie funkcja kolejno po obiektów JavaScript i tablic.

Przykłady:

JavaScript Array (lub obiekt js) za pomocą $ .each():

var myArray = [10,20,30]; 

jQuery.each(myArray, function(index, value) { 
    console.log('element at index ' + index + ' is ' + value); 
}); 

//Output 
element at index 0 is 10 
element at index 1 is 20 
element at index 2 is 30 

obiekty wykorzystujące .each jQuery()

$('#dv').children().each(function(index, element) { 
    console.log('element at index ' + index + 'is ' + (this.tagName)); 
    console.log('current element as dom object:' + element); 
    console.log('current element as jQuery object:' + $(this)); 
}); 

//Output 
element at index 0 is input 
element at index 1 is p 
element at index 2 is span 

Jeśli szukają dalszych przykładów + szczegółów, $.each vs .each()

Resources

3

Chcesz naprawdę używać $.each z tablicą, która nie jest elementami lub czymś. tj:

var x = ["test", "test2"]; 

byłoby użyć $.each(x... przemierzać że zamiast x.each :)

.each jest dla elementów tylko :)

1

Pierwszy uruchomi funkcję zwrotną do elementów w kolekcji minąłeś, ale w tym momencie Twój kod nie jest poprawny pod względem składni.

Powinno być:

$.each($('#myTable input[name="deleteItem[]"]:checked'), do_something); 

Patrz: http://api.jquery.com/jQuery.each/

Drugi będzie uruchomić funkcję na każdym elemencie kolekcji są uruchomione go.

Patrz: http://api.jquery.com/each/

+0

Zamiast podawania go nazywasz 'do_something'. Jest to niepoprawne, chyba że 'do_something' zwróci funkcję. – user113716

+1

Ah tak, dzięki @patricka dw, odpowiedź odpowiednio edytowana. – StuperUser

0

Zrobione z http://api.jquery.com/jQuery.each/

Funkcja $.each() nie jest taka sama jak .each(), który jest używany do iteracji, wyłącznie na obiekcie jQuery. Funkcja $.each() może być użyta do iteracji w dowolnej kolekcji, niezależnie od tego, czy jest to mapa (obiekt JavaScript) czy tablica. W przypadku tablicy wywołanie zwrotne przekazuje za każdym razem indeks tablicy i odpowiadającą jej wartość tablicy. (Dostęp do tej wartości można również uzyskać za pomocą tego słowa kluczowego, ale JavaScript zawsze będzie zawijał tę wartość jako obiekt, nawet jeśli jest to prosta wartość ciągu lub liczby). Metoda zwraca pierwszy argument, obiekt, który został powtórzony.

1

Istnieje nie różnica funkcjonalna. Każdy obiekt jQuery jest właścicielem metody .each() odziedziczonej po jQuery.fn. Nazywając to object method, jQuery już wie, który Array (-like object) iterować. Innymi słowy, zapętla się nad indexed propertys z bieżącego obiektu jQuery.

$.each() z drugiej strony jest tylko „narzędziem pomocnika”, który pętle nad wszelkiego rodzaju Array lub Object, ale oczywiście trzeba powiedzieć, że metody, które kierują chcesz iteracyjne.
Dba również o to, czy przekazujesz tablicę lub obiekt, robi to dobrze, pod maską for-in lub for loop.

5

z http://api.jquery.com/jQuery.each:

Funkcja $ .each() nie jest taki sam jak .each (), który jest używany do iteracji, wyłącznie za pomocą obiektu jQuery. Funkcja $ .each() może być użyta do iteracji dla dowolnej kolekcji, niezależnie od tego, czy jest to tablica (obiekt JavaScript), czy tablica .

0

W pierwszym przypadku można iteracyjne nad obiektami jQuery, a także innych elementów tablicy, jak wskazano tutaj:

jQuery.each()

W drugim przypadku można tylko itterate nad obiektami jQuery jak wskazano tutaj:

.each()

0

Z tego co rozumiem $.each(); pętle przez obiekt lub tablicy i daje y it iterator i wartość każdego przedmiotu.

$().each(); wykonuje pętlę z listy obiektów jQuery i udostępnia iterator i obiekt jQuery.