Как преобразовать результат функции jQuery.find() в массив?
Что возвращает метод jQuery .find()
? объект ИЛИ список массивов объектов?
Если он возвращает объект, который содержит все совпадающие элементы. Как преобразовать этот объект в массив?
Если он возвращает массив элементов, почему $(xml).find("DATE").sort(mySortFunc);
не работает, кажется, что jQuery .find()
возвращает объект, который не может применить метод Javascript sort()
, который должен применяться к массиву.
Как правило, мне нужно отсортировать объекты, найденные с помощью $(xml).find("DATE")
, но когда я использую функцию сортировки, возникает ошибка, что объект не может быть разрешен.
Ответы
Ответ 1
Большинство методов jQuery возвращает объект jQuery, к которому можно получить доступ, подобно массиву (например, он имеет атрибут .length
, к элементам можно получить доступ с использованием знака с квадратной скобкой ([0]
)), и он поддерживает некоторые методы массива (slice()
)).
jQuery имеет метод toArray()
, который может быть использован для преобразования объекта jQuery в реальный массив.
Вы также можете использовать get()
без аргументов для достижения такого же эффекта (и сэкономить несколько нажатий клавиш).
В будущем вы можете проверить jQuery API, а тип возврата для всех методов jQuery указан в соответствующей документации (например, для find()
, тип возврата - "jQuery" )
Ответ 2
Если вы вызовете .get()
для объекта jQuery без параметра, он вернет обычный массив элементов DOM.
Ответ 3
jQuery уже действует как массив, и поэтому вы можете применить к нему массив, как функциональность.
Попробуйте изменить
$(xml).find("DATE").sort(mySortFunc);
с
Array.prototype.sort.apply($(xml).find("DATE"), mySortFunc);
и вы должны получить то, что вам нужно