$ .each ([коллекция]) против $ ([коллекция]). each () - PullRequest
9 голосов
/ 23 февраля 2010

Оба метода, по-видимому, дают одинаковые результаты , но мне было трудно убедить людей в том, что второй метод работает, поскольку он, по-видимому, широко не известен.

// Create some data
var foo = { 'vals':[ {'id':'foo'}, {'id':'bar'} ] }​​​​​​​​​​​​​​​​​;

// Common Method    
$.each(foo.vals, function(i,o){
    alert(this.id);
});

// Alternative (lesser-known?) Method
$(foo.vals).each(function(i,o){
   alert(this.id); 
});

После проверки источника эти два выглядят одинаково. Второй метод следующий:

each: function( callback, args ) {
  return jQuery.each( this, callback, args );
}

Этот метод явно вызывает более известный метод, то есть он такой же законный. Это понимание правильно, или я что-то здесь упускаю?

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

$("p").each();

Так что это кажется естественным:

$(obj).each();

Я ошибаюсь?

Ответы [ 2 ]

12 голосов
/ 24 февраля 2010

Разница между ними на самом деле экспоненциальная в зависимости от того, как вы ее используете.

Первый $.each представляет собой одиночный вызов функции для запуска итератора.

Второй $(foo.vals).each вызывает три вызова функции для запуска итератора. Первый относится к $(), который создает новый набор оболочек jQuery (не уверен, сколько других вызовов функций было сделано во время этого процесса). Тогда звонок на $().each. И, наконец, он выполняет внутренний вызов jQuery.each для запуска итератора.

В вашем примере разница будет незначительной, если не сказать больше. Однако в сценарии с вложенным использованием производительность может стать проблемой.

Наконец, Коди Линдли в jQuery Enlightenment не рекомендует использовать $.each для итераций, превышающих 1000, из-за задействованных вызовов функций. Используйте обычный цикл for( var i = 0....

2 голосов
/ 23 февраля 2010

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

Исходя из .NET land ... для меня это имеет больше смысла и облегчает чтение.

...