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?
Odpowiedzi:
Opis:
Przykłady
1) Korzystanie z
$.each()
funkcjivar 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
źródło
z http://api.jquery.com/jQuery.each :
źródło
Naprawdę chcesz używać
$.each
z tablicą, która nie jest elementami ani czymś takim. to znaczy:var x = ["test", "test2"];
Zwykłbyś
$.each(x...
to przemierzać zamiastx.each
:).each
dotyczy tylko elementów :)źródło
Nie ma różnicy funkcjonalnej. Każdy obiekt jQuery posiada
.each()
metodę dziedziczoną zjQuery.fn
. Wywołując toobject method
, jQuery już wie, po którejArray (-like object)
iteracji. Innymi słowy, wykonuje pętlę nadindexed propertys
bieżącym obiektem jQuery.$.each()
z drugiej strony jest po prostu „narzędziem pomocniczym”, które zapętla się po każdym rodzajuArray
lubObject
, 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-in
lubfor loop
pod maską.źródło
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/
źródło
do_something
zamiast go przekazać. Jest to niepoprawne, chyba żedo_something
zdarzy się, że zwróci funkcję.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()
źródło
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.źródło
Zaczerpnięte z http://api.jquery.com/jQuery.each/
źródło