В чем разница между queryAll и querySelectorAll
на определения из стандарта DOM выглядит почти точно так же, и я не понимаю разницы.
в чем разница между queryAll и querySelectorAll.
логика оценки от стандарта DOM ниже, но я недостаточно умен, чтобы понять это.
query & queryAll
чтобы сопоставить относительные селекторы string relativeSelectors с набором, выполните следующие действия:
пусть s-результат анализа относительного селектора из relativeSelectors против set. [Селекторы]
Если s-ошибка, бросьте JavaScript TypeError.
возвращает результат оценки селектора S с помощью: набор элементов области. [Селекторы]
метод query(relativeSelectors) должен возвращать первый результат выполнения соответствия строки относительных селекторов relativeSelectors набору, состоящему из объекта контекста, и null, если результат пустой список.
метод queryAll(relativeSelectors) должен возвращать массив элементов, инициализированный результатом выполнения соответствия строки относительных селекторов relativeSelectors набору, состоящему из объекта контекста.
querySelector & querySelectorAll
чтобы область-сопоставить селекторы строки селекторов с узлом, выполните следующие действия:
пусть s-результат разбора селекторов селекторов. [Селекторы]
Если s-ошибка, бросьте JavaScript TypeError.
верните результат оценки селектора s против корня узла, используя корневой узел области и метод области-отфильтрованный. [СЕЛЕКТОРЫ.]
метод querySelector(selectors) должен возвращать первый результат выполнения scope-сопоставьте селекторы строк селекторов с объектом контекста и null, если результат является пустым списком в противном случае.
в метод querySelectorAll (selectors) должен возвращать статический результат выполнения области-сопоставлять селекторы строк селекторов с объектом контекста.
2 ответов
query() и queryAll() примите относительную строку селектора, тогда как querySelector() и querySelectorAll() нет. Относительный селектор-это в основном селектор, который может быть частичным и начинаться с комбинатора:
var parentNode = document.getElementById('parentNode'); // document.querySelector('#parentNode');
// Find .childNode elements that are direct descendants (children) of parentNode
// This cannot be done with querySelectorAll() using the existing reference to parentNode
parentNode.queryAll('> .childNode');
// querySelectorAll does allow getting all descendants of parentNode though
parentNode.querySelectorAll('.childNode');
но что еще более важно, queryAll() возвращает live Elements[] массив, а NodeList возвращено querySelectorAll() является статическим, что означает, что узлы в этом списке не обновляются при внесении изменений в их соответствующие элементы DOM.
С точки зрения их функциональность, query() и queryAll() может быть более аналогом find() и findAll(), определена в селекторы API уровня 2 - где вы также найдете определение относительного селектора-поскольку обе группы методов принимают и работают с относительными селекторами. Обратите внимание, что findAll() также возвращает static NodeList, поэтому они все еще не полностью идентичны.
обновление 2016
queryAll был удален из спецификации DOM
в настоящее время самая важная разница между queryAll и querySelectorAll это queryAll (а также query) было удалено из спецификации DOM.
текущая версия спецификации DOM доступна по адресу:
Примечание.: https://www.w3.org/TR/dom/ является устаревшей вилкой стандарта DOM (см. отслеживание вилка на WHATWG Wiki и комментарий Доминика для получения дополнительной информации).
последнее упоминание
последняя версия, которая входит query и queryAll опубликовано 15 марта 2016 года:
-
http://web.archive.org/web/20160315085447/https://dom.spec.whatwg.org/
- посмотреть разделы 4.2.3. ParentNode Интерфейс и 4.2.6. Коллекции: Элементы
удаления
в следующей версии не упоминается query или queryAll где:
-
http://web.archive.org/web/20160329233515/https://dom.spec.whatwg.org/
- см. раздел 4.2.6. Mixin ParentNode
текущая спецификация
все вхождения query или queryAll
в стандарте DOM были закомментированы Анне ван Кестерен 29 марта 2016 года.
текущая спецификация DOM (по состоянию на июль 2016 года) не упоминает query или queryAll на всех:
querySelector и querySelectorAll в разделе
4.2.6 Mixin ParentNode.
кажется, что в настоящее время единственным надежным API является querySelector и querySelectorAll
(см. ответ для более подробной информации) и по это обсуждение на GitHub query и queryAll не будет доступен, пока подклассы JavaScript встроенных модулей не будут реализованы в браузерах, и даже тогда вряд ли будет возвращен массив live Elements [], как описано в ответ BoltClock.
поддержка браузеров
по состоянию на июнь 2016 года нет упоминания о query и queryAll на MDN:
С другой стороны querySelector и querySelectorAll хорошо документированы и широко поддерживается:
- https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll
поддержка браузер querySelector/querySelectorAll по данным могу ли я использовать по состоянию на июнь 2016 года:
(См.:http://caniuse.com/queryselector для обновления info)
нет никакой информации о поддержке query и queryAll.
Подробнее
см. также ответ для получения дополнительной информации об использовании и поддержке браузер querySelector и querySelectorAll.