Возвращаются ли объекты заказа указанным селектором jQuery?

93

Все селекторы jQuery возвращают массив объектов. Всегда ли эти объекты находятся в том же порядке, что и в HTML? Могу я на это рассчитывать?

user28584
источник

Ответы:

115

Да.
В примечаниях к выпуску jQuery 1.3.2 говорится:

Элементы, возвращенные в порядке документа

Это изменение в механизме селектора jQuery, которое переупорядочивает возвращаемые результаты, чтобы они были в порядке документа, а не в порядке, в котором были переданы селекторы. Это изменение было сделано для того, чтобы соответствовать спецификации API селекторов (которая jQuery используется внутри в браузерах, которые его поддерживают).

В jQuery 1.3 этого не было :

Порядок выбора стилей «a, b, c» может измениться. Браузеры, поддерживающие querySelectorAll (Safari, Firefox 3.5+, Opera 10+, IE 8+), будут возвращать элементы в порядке документа, другие браузеры (в настоящее время) будут возвращать их в указанном порядке. В версии 1.3.2 и более поздних все селекторы, разделенные запятыми, будут возвращены в порядке документа.

Коби
источник
1
Интересно, что это действительно есть в примечаниях к выпуску, и это тоже имеет смысл, но кто-то забыл поместить его также в api.jquery.com/multiple-selector - дорогой кто-нибудь, добавьте эту информацию туда тоже :)!
jave.web 05
Ответ действительно старый. Кто-нибудь нашел обновленную ссылку?
Дэниел Лич
1
@DanielLeach - обновил ссылки, спасибо. Такое поведение по-прежнему должно быть правильным, оно также приведено здесь для последней версии: api.jquery.com/multiple-selector
Коби,
8

Могут быть некоторые исключения, например из документации prevAll ():

"Учитывая объект jQuery, представляющий набор элементов DOM, метод .prevAll () просматривает предшественников этих элементов в дереве DOM и создает новый объект jQuery из соответствующих элементов; элементы возвращаются в порядке, начиная с ближайший брат ".

http://api.jquery.com/prevAll/

Эмери Лапински
источник
3

Да, они всегда в том порядке, в котором они находятся в DOM.

reko_t
источник
0

Вероятно, в том порядке, в котором он их находит, селектор в значительной степени пересекает DOM и, когда находит соответствующий элемент, помещает его в массив.

Вы могли бы провести тест, скажем, 5 текстовых полей с идентификатором "textbox_n", где n - число, а затем предупредить список и посмотреть, что вы получите?

Royse41
источник