jQuery - эквивалент каждому (), но для одного элемента - PullRequest
31 голосов
/ 01 февраля 2011

Каков эквивалент jQuery для каждого ():

$(".element").each(function(){  
  // do stuff
});

при присоединении функции к одному элементу, например #element?

Ответы [ 7 ]

18 голосов
/ 01 февраля 2011

Вы всегда можете ссылаться на объект jQuery в переменной:

var $el = $('#element');

... затем манипулируйте им.

$el.doSomething();          // call some jQuery methods from the cached object
$el.doSomethingElse();

Если причина, по которой вы хотели .each(), состояла в том, чтобы ссылаться на элемент DOM как this, вам не нужно ключевое слово this для этого, вы можете просто извлечь элемент DOM из объекта jQuery.

var element = $('#element')[0];       // both of these give you the DOM element
var element = $('#element').get(0);   //        at index 0

Два из них эквивалентны и будут извлекать элемент DOM, на который будет ссылаться как this в .each().

alert( element.tagName );  // alert the tagName property of the DOM element
alert( element.id );       // alert the ID property of the DOM element

Я бы отметил, что не обязательно использовать каждый из них для перебора одного элемента.

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

Есть и другие способы сделать это. Возьмите этот пример:

(function( $ ) {

    // Inside here, "this" will refer to the DOM element,
    //    and the "$" parameter, will reference the jQuery library.

    alert( this.tagName );

    // Any variables you create inside will not pollute the surrounding 
    //     namespace.

    var someVariable = 'somevalue'; // is local to this function

}).call( $('#element')[0], jQuery );
13 голосов
/ 01 февраля 2011

Чтобы напрямую ответить на ваш вопрос, .each() работает нормально на наборах элементов любого размера, включая 1.

Вы также можете полностью опустить вызов .each() и просто вызвать методы jQuery для $('#element'). Помните, что вы можете связать большинство, если не все вызовы методов jQuery, так как они возвращают объект jQuery. Это даже работает на нескольких элементах в зависимости от того, что делают методы.

$('#element').doSomething().doSomethingElse();

Если вам нужно ссылаться на объект несколько раз, создайте переменную:

var $elm = $('#element');
$elm.doSomething();
doSomethingElse($elm);
9 голосов
/ 01 февраля 2011

Использование first().

each() соответствует всем элементам, а first() соответствует только первому.

Есть и другие селекторы. Когда вы используете идентификатор в селекторе, вы получите только один элемент. Это основное различие между .element и #element. Первый - это класс, который можно назначить многим элементам, а второй - идентификатор, который принадлежит только (не более) одному элементу.

Вы по-прежнему можете использовать каждый, если возвращается только один (или 0) элемент. Кроме того, вы можете пропустить каждый из них, если вы хотите связать событие. Вы используете each, когда хотите выполнить определенную функцию для каждого элемента в списке элементов.

2 голосов
/ 01 февраля 2011

За кулисами each - это просто цикл for, который проходит через каждый элемент в map, возвращаемом jQuery.

Это по сути & dagger; так же, как:

var i, map = $('...selector...');
for (i = 0; i < map.length; i++)
{
  someFunction(i, map[i]);
}

& крестик; Это нечто большее, включая вызов функции в контексте элемента карты и т. Д.

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

2 голосов
/ 01 февраля 2011

Если есть только 1 элемент, вы можете получить к нему доступ с помощью селектора.

$('#your_element').your_event(function() {

});
1 голос
/ 01 февраля 2011

Вы имеете в виду как $ ('# element'). Children (). Each () Предположим, у вас есть что-то вроде ul с идентификатором, и вы хотите, чтобы li внутри него были?

0 голосов
/ 01 декабря 2018

Если намерение состоит в том, чтобы вызвать (не jQuery) функцию в новой области, я думаю, что использование «each» все еще является допустимым (и, вероятно, наиболее элегантным) способом и остается верным синтаксису jQuery, хотя я согласен с Алекс, это неправильно, так как у него могут быть некоторые накладные расходы. Если вы можете изменить синтаксис, используйте $('#element')[0] вместо this (как уже упоминалось в принятом ответе).

Кстати, может кто-то с достаточной репутацией исправит комментарий "zzzzBov" о принятом ответе? $('#element')[0] и $('#element').get(0) ARE! то же самое, если вы хотите, чтобы объект jQuery использовал $('#element').first() или $('#element').eq(0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...