Jquery возвращает список с помощью идентификатора селектора - PullRequest
5 голосов
/ 28 февраля 2011

У меня проблемы с jquery и селекторами, использующими следующий код:

<div id="test"></div>
console.log($('#test'));

Это всегда возвращает список типа [<div id=​"test">​</div>​] вместо одного элемента.

В результате всегда приходится писать $('#test')[0] для каждой операции, а не только $('#test').Есть идеи о том, почему?

С уважением

Ответы [ 4 ]

8 голосов
/ 28 февраля 2011

Jquery не возвращает HtmlElement, он возвращает объект jQuery.

Объект jQuery содержит коллекцию объектной модели документа (DOM) элементы, которые были созданы из HTML-строка или выбранный из документ. Так как методы jQuery часто использовать селекторы CSS для соответствия элементов из документа, набор элементов в объекте jQuery часто называют набор "соответствующих элементов" или "выбранных" элементы "

Сам объект jQuery ведет себя очень как массив; это имеет длину свойство и элементы в объект может быть доступен их числовые индексы от [0] до [длина-1]. Обратите внимание, что объект jQuery не на самом деле объект массива Javascript, так он не имеет всех методов Истинный объект Array, такой как join (). http://api.jquery.com/Types/#jQuery

Это пример составного шаблона проектирования

Составной шаблон описывает группу объектов, которые могут обрабатываться таким же образом, как и отдельный экземпляр объекта. Реализация этого шаблона позволяет обрабатывать как отдельные объекты, так и композиции единообразно. В jQuery, когда мы обращаемся или выполняем действия над одним элементом DOM или группой элементов DOM, мы можем обрабатывать оба элемента одинаково. http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjquery

0 голосов
/ 28 февраля 2011

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

$('#test').each(function() { 
  console.log($(this));
});
0 голосов
/ 28 февраля 2011

jQuery инкапсулирует любые объекты, найденные по ряду причин. Например, он гарантирует, что, несмотря ни на что, null никогда не будет возвращен, например. Скорее, найденные элементы вставляются в список. Тот факт, что даже если вы ищете один элемент, механизм всегда остается тем же самым, и поэтому результаты будут помещены в массив из одного элемента, а не самого элемента.

0 голосов
/ 28 февраля 2011

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

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