В чем разница между $ .each (селектор) и $ (селектор) .each () - PullRequest
78 голосов
/ 07 июля 2011

Какая разница между:

$.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, но до сих пор не понимаю разницу. (Это я или эта документация иногда немного «туманная» в ясности содержания?)

Добавлена ​​информация:

Видимо, моя попытка типичных примеров сбивает с толку людей! Наряду с (ранее) отсутствующей скобкой в ​​первом примере. (

Первый пример взят из строки в моем коде, которая удаляет

для всех строк с установленным флажком:
$.each($('#classesTable input[name="deleteClasses[]"]:checked').parent().parent().parent().remove());

Второй пример связан с ситуацией, когда я просматриваю таблицу #classes для всех отмеченных флажков и удаляю соответствующий элемент в раскрывающемся списке.

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

Я понимаю, что они делают две разные вещи, но не настолько, чтобы я мог сказать: «Мне нужно использовать $ .each () в этом случае и .each (function () {}) в другом случай.

Они вообще взаимозаменяемы? Только в некоторых случаях? Никогда

Ответы [ 8 ]

99 голосов
/ 07 июля 2011

Описание:

.each - это итератор, который используется для перебора только jQuery коллекция объектов, в то время как jQuery.each ($.each) является общим функция для перебора объектов и массивов javascript.

Примеры:

Массив Javascript (или объект js) с использованием $ .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

jQuery объекты с использованием .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

Если вы ищете дополнительные примеры + подробности, $. Каждый против .each ()

Ресурсы

5 голосов
/ 07 июля 2011

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

Функция $ .each () отличается от .each (), которая используется исключительно для итерации объекта jQuery.Функция $ .each () может использоваться для перебора любой коллекции, будь то карта (объект JavaScript) или массив.

3 голосов
/ 07 июля 2011

Вы действительно хотите использовать $.each с массивом, который не является элементами или чем-то еще. то есть:

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

Вы бы использовали $.each(x... для прохождения этого вместо x.each:)

.each только для элементов :)

1 голос
/ 07 июля 2011

Функциональной разницы нет. Каждый объект jQuery имеет метод .each(), унаследованный от jQuery.fn. Вызывая это object method, jQuery уже знает, какие Array (-like object) итерировать. Другими словами, он зацикливается на indexed propertys из текущего объекта jQuery.

$.each() с другой стороны - это просто «вспомогательный инструмент», который работает с любым типом Array или Object, но, конечно, вы должны указать этому методу, какую цель вы хотите повторить. Он также позаботится о том, передадите ли вы массив или объект, он правильно сделает, используя for-in или for loop под капотом.

1 голос
/ 07 июля 2011

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

Должно быть:

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

См .: http://api.jquery.com/jQuery.each/

Второй запустит функцию для каждого элемента коллекции, на которой вы ее запускаете.

См .: http://api.jquery.com/each/

0 голосов
/ 07 июля 2011

Из того, что я понимаю, $.each(); проходит через объект или массив и дает вам итератор и значение каждого элемента.

$().each(); перебирает список объектов jQuery и предоставляет вам итератор и объект jQuery.

0 голосов
/ 07 июля 2011

В первом случае вы можете перебирать объекты jQuery, а также другие элементы массива, как указано здесь:

jQuery.each ()

Во втором случае вы можете использовать только объекты jQuery, как указано здесь:

.each ()

0 голосов
/ 07 июля 2011

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

Функция $.each() отличается от .each(), которая используется исключительно для итерации объекта jQuery. Функцию $.each() можно использовать для перебора любой коллекции, будь то карта (объект JavaScript) или массив. В случае массива обратному вызову каждый раз передается индекс массива и соответствующее значение массива. (К значению также можно получить доступ через ключевое слово this, но Javascript всегда будет переносить это значение как объект, даже если это простая строка или числовое значение.) Метод возвращает свой первый аргумент - объект, который был повторен. *

...