Когда использовать 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 намного медленнее. Но если вы не называете это так сильно, это не должно быть проблемой.
РЕДАКТИРОВАТЬ - jsperf версия