Подтвердить что ты не робот

JQuery - эквивалентно каждому(), но для одного элемента

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

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

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

4b9b3361

Ответ 1

Вы всегда можете ссылаться на объект 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 );

Ответ 2

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

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

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

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

var $elm = $('#element');
$elm.doSomething();
doSomethingElse($elm);

Ответ 3

Используйте first().

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

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

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

Ответ 4

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

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

});

Ответ 5

За кулисами each представляет собой всего лишь цикл for, который выполняет итерацию через каждый элемент в map, возвращаемый jQuery.

Это по существу & dagger; то же самое, что:

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

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

Реализация должна обеспечить удобный способ вызова функции в элементе each в выборе.

Ответ 6

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

Ответ 7

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

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