В чем разница между $.each(селектор) и $(селектор).each()

В чем разница между этим:

$.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() {}) в другом случае.

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


person marky    schedule 07.07.2011    source источник
comment
В вашем первом примере кода отсутствует закрывающая скобка.   -  person tjollans    schedule 07.07.2011
comment
Комментарий и запятая, см. мой ответ для примера.   -  person StuperUser    schedule 07.07.2011
comment
Смысл первого примера можно интерпретировать по-разному. Пожалуйста, исправьте это, чтобы отразить то, что вы на самом деле делаете.   -  person user113716    schedule 07.07.2011
comment
Я добавил отсутствующую правую скобку в конце строки, прямо перед точкой с запятой.   -  person marky    schedule 07.07.2011


Ответы (8)


Описание:

.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

Ресурсы

person Phil    schedule 07.07.2011

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

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

person tig    schedule 07.07.2011

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

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

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

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

person Michael Wright    schedule 07.07.2011

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

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

person jAndy    schedule 07.07.2011

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

Должен быть:

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

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

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

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

person StuperUser    schedule 07.07.2011
comment
Вы вызываете do_something вместо того, чтобы передать его. Это неверно, если только do_something не возвращает функцию. - person user113716; 07.07.2011

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

jQuery.each()

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

.each()

person Jamie Dixon    schedule 07.07.2011

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

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

person Seth    schedule 07.07.2011

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

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

person Odnxe    schedule 07.07.2011