jQuery не LINQ. Когда вы вызываете $('myselector')
, это переводится на звонок document.querySelectorAll
, который возвращает список узлов. Отложенная загрузка отсутствует. Список также не «живет». Он представляет собой DOM в то время. Поэтому, если вы измените его (добавьте узлы, удалите узлы), ваш список не будет изменен. Он представляет состояние DOM во время вызова селектора. У Mozilla есть большое объяснение этого на MDN here.
Также следует отметить, что в дополнение к вызову document.querySelectorAll
, иногда jQuery должен обрабатывать селектор самостоятельно, используя движок Sizzle. Это происходит, когда вы используете определенные расширения, которые не являются частью того, что поддерживает querySelectorAll
, или если вы используете браузер, который не имеет этой функции. Одним из таких примеров является псевдокласс класса :eq(N)
. Это не часть querySelectorAll
, и поэтому jQuery делает весь тяжелый подъем. Обратите внимание, что даже если все это сделано Sizzle, оно все равно выполняется немедленно и возвращает неживой список узлов, соответствующих селектору.
Thx. Является ли это результатом спецификации, поэтому она не изменится или просто появится, исследуя источник, и в будущих реализациях она может измениться в зависимости от намерения разработчика? –
@ g.pickardou: Я не могу найти его прямо сейчас, но как это работает, это фундаментальная часть работы jQuery, поэтому в будущем это не изменится. Объект jQuery представляет собой объект, подобный массиву, который содержит результат запроса. – Guffa