Что на самом деле возвращает jquery $?

113

Я прочитал документацию JQuery, и, хотя много внимания уделяется тому, что вы должны передать функции, я не вижу никакой информации о том, что она на самом деле возвращает .

В частности, всегда ли он возвращает массив, даже если найден только один элемент? Возвращает ли он значение null, если ничего не найдено? Где это задокументировано?

Я понимаю, что методы jquery могут применяться к возвращаемому значению, но что, если я хочу просто использовать возвращаемое значение напрямую?

Харпо
источник

Ответы:

76

Из описания Рика Страла :

Объект jQuery: обернутый набор: селекторы возвращают объект jQuery, известный как «обернутый набор», который представляет собой структуру, подобную массиву, которая содержит все выбранные элементы DOM. Вы можете перебирать обернутый набор как массив или обращаться к отдельным элементам через индексатор (например, $ (sel) [0]). Что еще более важно, вы также можете применять функции jQuery ко всем выбранным элементам.

О возврате ничего:

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

Вы всегда получаете одно и то же обратно, независимо от того, есть ли у него какое-либо содержимое - вот в чем вопрос. Обычно это можно проверить с помощью .val () (например, $ ('. MyElem'). Val ())

Ян Робинсон
источник
1
Отлично, спасибо ... это очень помогло. Я не знал, что определяемый пользователем объект может одновременно быть таким «подобным массиву» - я думаю, в этом гений jquery.
harpo
Пожалуйста - я также только что отредактировал и добавил полную ссылку на статью Рика Страла - это хорошее чтение.
Ян Робинсон
14
На вопрос, который привел меня сюда, а именно, как проверить, было ли что-то найдено, я выбрал $ (query) .length , который, кажется, помогает .
harpo
3
что такое массив, как набор ... это массив или объект или? ... можем ли мы быть точными?
26

Он не возвращает массив, он возвращает объект jQuery. Объект jQuery - это то, что содержит все специальные методы jQuery.

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

Джон Милликин
источник
6

Функция jQuery (т.е. " $") всегда возвращает объект jQuery в каждом экземпляре.

Эндрю Хэйр
источник
4
@harpo: совсем нет; Просто рассматриваемые объекты плохо названы. «Объект jQuery», он же $«объект jQuery», он же «завернутый набор».
Шон Макмиллан
5

Как упомянул другой ответчик, он всегда возвращает объект jQuery.

Этот объект всегда содержит массив элементов (даже если это пустой массив или массив только с одним объектом).

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

$('selector')[0] // element
$('selector').get(0) // element
$('selector').length // number of elements in the array
TM.
источник
3

Из документации jQuery :

Сам объект jQuery ведет себя как массив; у него есть свойство длины, и к элементам в объекте можно обращаться по их числовым индексам от [0] до [length-1]. Обратите внимание, что объект jQuery на самом деле не является объектом массива Javascript, поэтому он не имеет всех методов настоящего объекта массива, таких как join ().

D512
источник
2

Тот факт, что $ () всегда возвращает функцию jQuery, позволяет разумно связывать вызовы функций jQuery.

Стефан Кендалл
источник
1
просить! $()не возвращает функцию jQuery (которая есть $сама по себе), но возвращает завернутый набор со всеми этими полезными методами.
Шон Макмиллан
1

Механизм селектора jquery

$("..") , селектор jquery, используется для выбора совпадающих элементов.

Возвращаемое значение

Он всегда возвращает объект jquery, подобный массиву, у которого есть lengthсвойство,

Метод вызова для возвращенного объекта jquery

Методы jquery могут быть вызваны для объекта и применяться к этим выбранным элементам,

Доступ к исходному элементу по индексу

Выбранные элементы сохраняются как свойство объекта, их имена свойств - это номера индексов, начинающиеся с 0,
таким образом, к ним можно получить доступ по индексу, начиная с 0,
после получения исходного элемента вы можете рассматривать его, как будто закончили document.getElementXxx().

Перенести исходный элемент в объект jquery

После получения исходного элемента вы можете обернуть его как объект jquery, вызвав $(originalEle), а
затем вы можете вызвать методы jquery для обернутого объекта.

Эрик Ван
источник
0

Согласно firebug, он возвращает массив объектов, соответствующих вашему селектору. Но этот массив - объект jQuery, у которого больше методов, чем у простого массива.

eKek0
источник
0

В их документации перечислены несколько основных вызовов, которые можно использовать с "$", и то, что они возвращают.

jrsconfitto
источник