Jaka jest różnica między $ .each (selector) a $ (selector) .each ()

83

Jaka jest różnica między tym:

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

i to:

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

Kod HTML wybranej komórki tabeli, na podstawie której wykonano działanie, wygląda następująco:

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

Przejrzałem dokumentację jQuery, ale nadal nie rozumiem różnicy. (Czy to ja, czy ta dokumentacja czasami jest nieco „mglista” w klarowności treści?)

Dodane informacje:

Najwyraźniej moja próba podania ogólnych przykładów dezorientuje ludzi! Wraz z (wcześniej) brakującym nawiasem w pierwszym przykładzie. :(

Pierwszy przykład pochodzi z wiersza w moim kodzie, który usuwa <tbody> dla wszystkich wierszy z zaznaczonym polem wyboru:

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

Drugi przykład pochodzi z sytuacji, w której przeglądam #classesTable w poszukiwaniu jakichkolwiek zaznaczonych pól wyboru i usuwam odpowiadające im elementy z listy rozwijanej.

$('#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 ​​mógłbym powiedzieć „Muszę użyć $ .each () w tym przypadku i .each (function () {}) w innym przypadku.

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

marky
źródło
W pierwszym przykładowym kodzie brakuje nawiasu zamykającego.
tjollans
Komentarz i przecinek, zobacz przykład w mojej odpowiedzi.
StuperUser
Zamiar pierwszego przykładu można interpretować na kilka różnych sposobów. Popraw to, aby odzwierciedlić to, co faktycznie robisz.
user113716
Dodałem brakujący prawy pasek na końcu wiersza, tuż przed średnikiem.
marky
Poleć 5 sposobów korzystania z jQuery $ .each
Satinder singh

Odpowiedzi:

104

Opis:

.eachjest iteratorem używanym do iteracji tylko po kolekcji obiektów jQuery, podczas gdy jQuery.each( $.each) to ogólna funkcja do iteracji po obiektach i tablicach JavaScript.


Przykłady

1) Korzystanie z $.each() funkcji

var myArray = [10,20,30];

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

2) Korzystanie z .each() metody

$('#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

Zasoby

Phil
źródło
5

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

Funkcja $ .each () to nie to samo, co .each (), która służy wyłącznie do iteracji po obiekcie jQuery. Funkcja $ .each () może służyć do iteracji po dowolnej kolekcji, niezależnie od tego, czy jest to mapa (obiekt JavaScript), czy tablica.

tig
źródło
3

Naprawdę chcesz używać $.eachz tablicą, która nie jest elementami ani czymś takim. to znaczy:

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

Zwykłbyś $.each(x...to przemierzać zamiast x.each:)

.each dotyczy tylko elementów :)

Michael Wright
źródło
1

Nie ma różnicy funkcjonalnej. Każdy obiekt jQuery posiada .each()metodę dziedziczoną z jQuery.fn. Wywołując to object method, jQuery już wie, po której Array (-like object)iteracji. Innymi słowy, wykonuje pętlę nad indexed propertysbieżącym obiektem jQuery.

$.each()z drugiej strony jest po prostu „narzędziem pomocniczym”, które zapętla się po każdym rodzaju Arraylub Object, ale oczywiście musisz wskazać metodzie, który cel chcesz iterować.
Zadba również o ciebie, niezależnie od tego, czy przekazujesz tablicę, czy obiekt, robi to dobrze, używając for-inlub for looppod maską.

jAndy
źródło
1

Pierwsza uruchomi funkcję zwrotną do elementów kolekcji, którą przekazałeś, ale Twój kod nie jest w tej chwili poprawny pod względem składniowym.

Powinno być:

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

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

Drugi uruchomi funkcję na każdym elemencie kolekcji, na którym ją uruchamiasz.

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

StuperUser
źródło
Dzwonisz do_somethingzamiast go przekazać. Jest to niepoprawne, chyba że do_somethingzdarzy się, że zwróci funkcję.
user113716
0

W pierwszym przypadku możesz iterować po obiektach jQuery, a także innych elementach tablicy, jak wskazano tutaj:

jQuery.each ()

W drugim przypadku możesz tylko itterować po obiektach jQuery, jak wskazano tutaj:

.każdy()

Jamie Dixon
źródło
0

Z tego, co rozumiem, $.each();przechodzi przez obiekt lub tablicę i podaje iterator i wartość każdego elementu.

$().each(); przegląda listę obiektów jQuery i udostępnia iterator oraz obiekt jQuery.

Seth
źródło
0

Zaczerpnięte z http://api.jquery.com/jQuery.each/

Ta $.each()funkcja nie jest tym samym .each(), co funkcja , która służy wyłącznie do iteracji po obiekcie jQuery. $.each()Funkcja może być używana do iteracyjne nad każdą kolekcję, czy jest to mapa (obiekt JavaScript) lub tablicą. W przypadku tablicy wywołanie zwrotne otrzymuje za każdym razem indeks tablicy i odpowiednią wartość tablicy. (Dostęp do wartości można również uzyskać za pomocą słowa kluczowego this, ale JavaScript zawsze zawija tę wartość jako obiekt, nawet jeśli jest to zwykły ciąg lub wartość liczbowa). Metoda zwraca swój pierwszy argument, obiekt, który był iterowany.

Odnxe
źródło