JQuery ID Selector ( "#id" ) Возвращает массив

Я использую jQuery v1.6.1 в режиме noConflict.

Я использую селектора id, такие как $j("#divID").value, чтобы получить значения сохраненных элементов.

К сожалению, $j("#inputID") возвращает список элементов, поэтому я должен использовать $j("divID")[0].value для получения значения объекта. [0] кажется ненужным, поскольку по определению существует только один элемент html с любым заданным id.

Является ли это подходящим способом получения значений из объекта IDed? Или есть лучший способ?

Спасибо!

Ответ 1

$j("#divID").val() будет работать нормально.

В jQuery documentation, .val() вернет значение первого элемента в наборе согласованных элементов.

Стоит понять концептуально, как работает jQuery, чтобы понять, почему он работает таким образом. Результатом любого запроса выбора является объект jQuery. Это объект jQuery, который содержит множество методов, которые предлагает jQuery. .val() является одним из таких методов, как такие, как .fadeIn(), .hide() и т.д.... Эти методы не являются методами объекта DOM, а являются методами объекта jQuery. Поскольку объекты jQuery являются общими целями и могут содержать 0, 1 или более объектов DOM в своем внутреннем массиве, вы получаете тот же объект jQuery из вызова селектора jQuery, если в нем есть 0, 1 или более объектов DOM.

Таким образом, $j("#divID"), содержащий только один объект, возвращает объект того же типа, что и $j(".rows"), который может содержать сотни объектов DOM. Это значительно упрощает программирование jQuery, потому что вам не нужно делать что-то по-другому в зависимости от того, сколько объектов возвращается из запроса селектора.

Когда вы ссылаетесь на $j("divID")[0], вы попадаете в внутренний массив объектов jQuery объектов DOM (который был заполнен в запросе селектора) и извлекаете первый объект DOM в этом массиве. В этот момент у вас есть обычный объект DOM, а не объект jQuery, и вы можете использовать обычные методы DOM или атрибуты на нем. Иногда это требуется (для получения фактического объекта DOM), но обычно проще просто использовать методы, которые jQuery предоставляет для объекта jQuery. Есть много преимуществ для их использования, таких как вы можете связать несколько запросов с большинством методов, и он будет автоматически перебирать все объекты DOM внутри него внутреннего массива.

Например, вы вызвали это: $j("rows-even").hide(), и было 20 строк с этим классом, тогда каждый из них будет работать с помощью метода hide() без кода больше, чем это. Вы можете объединить несколько методов вместе следующим образом: $j("rows-even").slideUp().slideDown(). В этом случае вы запускаете анимацию, и jQuery объединяет эти две анимации вместе, автоматически начиная вторую, когда заканчивается первая. Все это очень полезно во многих случаях и может сэкономить тонну кода над тем, что обычно должно быть написано с использованием простой JS.

Ответ 2

$j("#divID") возвращает объект jQuery. Чтобы получить значение выбранного элемента, вы должны вызвать его метод val, чтобы получить значение.

Используйте $j("#divID").val();