У чому різниця між $ .each (селектор) і $ (селектор) .each ()


83

Яка різниця між цим:

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

і це:

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

Html для комірки таблиці, яка вибирається та діє відповідно, виглядає так:

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

Я ознайомився з документацією jQuery, але досі не розумію різниці. (Це я чи ця документація іноді злегка "туманна" за ясністю змісту?)

Додана інформація:

Очевидно, моя спроба загальних прикладів бентежить людей! Разом з (раніше) відсутніми дужками в першому прикладі. :(

Перший приклад походить з рядка в моєму коді, який видаляє <tbody> для будь-яких рядків із встановленим прапорцем:

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

Другий приклад походить із ситуації, коли я переглядаю #classesTable на наявність будь-яких позначених прапорців і видаляю його відповідний елемент у спадному меню.

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

Я розумію, що вони роблять дві різні речі, але не до того, щоб я міг сказати: "Мені потрібно використовувати $ .each () у цьому випадку та .each (function () {}) в іншому випадку.

Чи взагалі вони взаємозамінні? Лише в деяких випадках? Ніколи?


У вашому першому прикладі коду відсутня закриваюча дужка.
tjollans

Коментар та кома, див. Мою відповідь для прикладу.
StuperUser

Намір першого прикладу можна трактувати кількома різними способами. Будь ласка, виправте його, щоб відображати те, що ви насправді робите.
user113716 07

Я додав відсутній правий ключ у кінці рядка, перед крапкою з комою.
marky

Перегляньте 5 способів використання jQuery $ .each () codepedia.info/use-jquery-each-method-loop
Satinder singh

Відповіді:


104

Опис:

.each- це ітератор, який використовується для ітерації лише колекції об’єктів jQuery, а jQuery.each( $.each) - загальна функція для ітерації об’єктів та масивів JavaScript.


Приклади

1) Використання $.each() функції

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) За допомогою .each() методу

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

Ресурси


5

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

Функція $ .each () - не те саме, що .each (), яка використовується для ітерації виключно над об’єктом jQuery. Функцію $ .each () можна використовувати для перебору будь-якої колекції, будь то карта (об’єкт JavaScript) або масив.


3

Ви хочете насправді використовувати $.eachз масивом, який не є елементами чи щось інше. тобто:

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

Ви б використали, $.each(x...щоб пройти це замість x.each:)

.each призначений лише для елементів :)


1

Функціональної різниці немає. Кожен об'єкт jQuery володіє .each()методом, успадкованим від jQuery.fn. Зателефонувавши до цього object method, jQuery вже знає, для чого Array (-like object)повторити. Іншими словами, він перемикається indexed propertysз поточного об'єкта jQuery.

$.each()з іншого боку, це просто "допоміжний інструмент", який перемикається на будь-який тип Arrayабо Object, але, звичайно, ви повинні вказати тому методу, яку ціль ви хочете повторити.
Він також подбає про вас, незалежно від того, передаєш ти масив чи об’єкт, чи правильно робиш, використовуючи for-inабо for loopпід капотом.


1

Перший запустить функцію зворотного виклику для елементів у колекції, яку ви передали, але ваш код на даний момент не є синтаксично правильним для цього.

Вона повинна бути:

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

Див .: http://api.jquery.com/jQuery.each/

Другий запустить функцію на кожному елементі колекції, на якій ви її запускаєте.

Див .: http://api.jquery.com/each/


Ви телефонуєте, do_somethingа не передаєте його. Це неправильно, якщо do_somethingвипадково не повертається функція.
user113716 07

0

У першому випадку ви можете переглядати об'єкти jQuery, а також інші елементи масиву, як зазначено тут:

jQuery.each ()

У другому випадку ви можете переглядати лише об'єкти jQuery, як зазначено тут:

.each ()


0

З того, що я розумію, $.each();проходить цикл через об'єкт або масив і дає вам ітератор та значення кожного елемента.

$().each(); переглядає список об'єктів jQuery і надає вам ітератор та об'єкт jQuery.


0

Взято з http://api.jquery.com/jQuery.each/

$.each()Функція не такий же , як .each(), який використовується для ітерації, виключно, через об'єкт JQuery. $.each()Функція може бути використана для перебору будь-якої колекції, будь то карта (об'єкт JavaScript) або масив. У випадку масиву, зворотному виклику кожен раз передається індекс масиву та відповідне значення масиву. (До значення також можна отримати доступ за допомогою цього ключового слова, але Javascript завжди буде обертати це значення як Об'єкт, навіть якщо це просте значення рядка або числа.) Метод повертає свій перший аргумент - об'єкт, який було повторено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.