jQuery ID Selector ("#id") возвращает массив
Я использую jQuery v1.6.1 в режиме noConflict.
Я использую селекторы идентификаторов, такие как $j("#divID").value
для получения значений сохраненных элементов.
к сожалению, $j("#inputID")
возвращает список элементов, поэтому я должен использовать $j("divID")[0].value
чтобы получить значение объекта. Элемент [0]
кажется ненужным, так как есть, по определению, только один элемент html с любым заданным идентификатором.
это подходящий способ получить значения из объекта IDed? Или есть лучше путь?
спасибо!
2 ответа:
$j("#divID").val()
будет работать нормально.на документация jQuery,
.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]
, вы достигаете внутреннего массива объектов DOM объекта jQuery (который был заполнен в запросе селектора) и извлекаете первый объект DOM в этом массиве. В этот момент у вас есть обычный объект DOM, а не объект jQuery, и вы можете использовать обычные методы DOM или атрибуты на нем. Иногда это необходимо (для извлечения фактического объекта DOM), но обычно проще просто использовать методы, которые предоставляет jQuery для объекта jQuery. Есть много преимуществ для их использования, таких как вы можете связать несколько запросов к большинству методов, и он будет автоматически перебирать все объекты DOM во внутреннем массиве для вас.например, вы называли это:
$j("rows-even").hide()
и было 20 строк с этим классом, тогда все они будут управляться с помощью hide() метод с не большим количеством кода, чем это. Из вас можно было бы объединить несколько методов вместе следующим образом:$j("rows-even").slideUp().slideDown()
. В этом случае вы запускаете анимацию, и jQuery будет связывать эти две анимации вместе, автоматически начиная вторую, когда заканчивается первая. Это все довольно полезно во многих обстоятельствах и может сэкономить массу кода над тем, что обычно должно быть написано с помощью простого JS.