Всегда ли jQuery возвращает массив?

Всегда ли jQuery возвращает массив при выборе элемента (конечно, если существует хотя бы один элемент)? Пример:

$('#Myelement')
$('div')
$('tbody')

Что, если селектор - это ID? Что, если селектор является элементом, но имеет только одно вхождение?


person dpp    schedule 08.08.2011    source источник


Ответы (2)


Функция jQuery всегда возвращает объект jQuery (который основан на массиве), даже если нет соответствующих элементов селектор.

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

Если вам нужно знать, содержит ли объект jQuery какие-либо элементы, вы можете использовать свойство length.

person Guffa    schedule 08.08.2011
comment
На мой взгляд, ваш второй оператор не является хорошим объяснением, потому что jQuery возвращает массив не по этой причине. Это потому, что $ () находит элементы, соответствующие заданному селектору, поэтому вы не можете ожидать, что элемент имеет некоторый идентификатор, но результат, содержащий элемент, имеющий некоторый идентификатор. - person Matías Fidemraizer; 08.08.2011
comment
@ Matías Fidemraizer: Второй абзац - это не объяснение того, почему методы возвращают массив, это объяснение того, как вы можете использовать это в своих интересах. Боюсь, что я не понимаю, что вы имеете в виду, говоря о предлагаемом вами объяснении. - person Guffa; 08.08.2011
comment
Но когда я делаю $('td')[0].html('hi'), это вызывает у меня исключение, в нем говорится, что индекс не имеет метода .html, что означает, что элементы в массиве, возвращаемом jQuery, не являются частью объекта jQuery. Я ошибся? - person dpp; 08.08.2011
comment
@domanokz: объект jQuery содержит элементы, он не содержит объектов jQuery. Если вы используете [0] для получения элемента из объекта jQUery, это простой элемент DOM, для которого нельзя использовать методы jQuery. Вы можете использовать метод first, чтобы ограничить результат первым элементом: $('td').first().html('hi'), или вы можете обернуть элемент в объект jQuery: $($('td')[0]).html('hi') (но это вызовет ошибку, если селектор не найдет элементов). - person Guffa; 08.08.2011
comment
@Guffa: На самом деле все наоборот. Объект jQuery не основан на массиве, это объект, который ведет себя как массив, добавляя .length и .splice() - person jAndy; 08.08.2011
comment
Перечитайте вопрос. Резюме: почему массив как результат? И почему выбор идентификатора тоже возвращает массив? А теперь перечитайте мой ответ: D - person Matías Fidemraizer; 08.08.2011
comment
@ Matías Fidemraizer: Я не нахожу основания для вашего резюме в вопросе. Перечитывая вопрос и читая ваш ответ, я не понимаю вашего более раннего объяснения. - person Guffa; 08.08.2011
comment
Хорошо, без проблем, подойдут и другие :) - person Matías Fidemraizer; 08.08.2011

Потому что $([selector]) похож на ярлык $.find([selector]), который является поиском по элементам.

Все, что выполняется с такими jQuery функциями, может вернуть один или несколько результатов, поскольку вы выполняете поиск, а не «выбираете результат».

person Matías Fidemraizer    schedule 08.08.2011