Как преобразовать результат функции jQuery .find () в массив? - PullRequest
20 голосов
/ 22 сентября 2011

Что возвращает метод jQuery .find()? объект ИЛИ список массивов объектов?

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

Если он возвращает массив элементов, почему $(xml).find("DATE").sort(mySortFunc); не работает, кажется, что jquery .find() возвращает объект, который не может применить метод сортировки javascript, который должен применяться к массиву.

Как правило, мне нужно отсортировать найденные объекты по $(xml).find("DATE"), но когда я использую функцию сортировки, возникает ошибка, что объект не может быть разрешен.

Ответы [ 3 ]

27 голосов
/ 22 сентября 2011

Большинство методов jQuery возвращает объект jQuery, к которому можно получить доступ, как к массиву (например, он имеет атрибут .length, к элементам можно обращаться, используя обозначение в квадратных скобках ([0]), и он поддерживает некоторые методы массива (slice())).

jQuery имеет метод с именем toArray(), который можно использовать для преобразования jQueryОбъект в реальном массиве.

Вы также можете использовать get() без аргументов для достижения того же эффекта (и сэкономить несколько нажатий клавиш).

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

6 голосов
/ 22 сентября 2011

Если вы вызовете .get() для объекта jQuery без параметра, он вернет обычный массив элементов DOM.

2 голосов
/ 22 сентября 2011

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

Попробуйте изменить

$(xml).find("DATE").sort(mySortFunc);

с

Array.prototype.sort.apply($(xml).find("DATE"), mySortFunc);

и вы должны получить то, что вам нужно

...