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?


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


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.


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 :)


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


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/


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


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.