Когда использовать querySelectorAll

В примере кода, который я написал

var as = toArray(document.getElementsByClassName("false")).filter(function (el) {
    return el.tagName === "A";
});

И я думал, что смогу заменить это

var as = document.querySelectorAll("a.false");

Теперь, прочитав следующие факты

  • Притворяться, что поддержка браузера не проблема (у нас есть прокладки и полифилы).
  • Представьте, что вы не в своем общем jQuery мышлении, вы должны использовать QSA для получения каждого элемента.
  • Я собираюсь написать qsa вместо document.querySelectorAll потому что я ленивый.

Вопрос: Когда я должен отдавать предпочтение QSA по сравнению с обычными методами?

Понятно, что если ты делаешь qsa("a") или же qsa(".class") или же qsa("#id") Вы делаете это неправильно, потому что есть методы (byTagName, byClassName, byId), которые лучше.

Также ясно, что qsa("div > p.magic") это разумный вариант использования.

Вопрос: но есть qsa("tagName.class") хороший вариант использования QSA?

Кроме того, есть и такие вещи, которые называются NodeIterator

Я задал вопрос о QSA против NodeIterator

3 ответа

Решение

Вы должны использовать QSA, когда gEBI, gEBN, gEBCN не работают, потому что ваш селектор сложен.

QSA и DOM-анализ - это вопрос предпочтений и того, что вы собираетесь делать с возвращенным набором данных.

Если бы поддержка браузера не была проблемой, я бы использовал ее везде. Зачем использовать 4 разных метода (...byId, ...byTagName, ...byClassName), если вы можете просто использовать один.

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

Я настроил несколько тестов, чтобы вы могли возиться с ними. Похоже, что QSA намного медленнее. Но если вы не называете это так сильно, это не должно быть проблемой.

http://jsfiddle.net/mxZq3/

РЕДАКТИРОВАТЬ - jsperf версия

http://jsperf.com/qsa-vs-regular-js

Другие вопросы по тегам