我写了一段示例代码
var as = toArray(document.getElementsByClassName("false")).filter(function (el) {
return el.tagName === "A";
});
我在考虑将其替换为
var as = document.querySelectorAll("a.false");
现在阅读以下事实:
- 假装浏览器支持不是问题(我们有 shim 和 polyfill)。
- 假设你不是处于通用的 jQuery 思维模式中,你应该使用 QSA 来获取每个元素。
- 我会写
qsa
而不是document.querySelectorAll
,因为我懒。
问题:我何时应该优先使用 QSA 而不是普通方法?
很明显,如果您正在执行 qsa("a")
或 qsa(".class")
或 qsa("#id")
,那么您正在做错事,因为有更好的方法(按标记名称、按类名、按 ID)。
当然,qsa("div > p.magic")
也是一个明智的用例。
问题:但是 qsa("tagName.class")
是否是 QSA 的一个好用例呢?
另外还有一些叫做 NodeIterator
的东西。
我曾就 QSA vs NodeIterator 提出过问题。
getElementsByTagNameAndClassName()
可用之前,querySelectorAll("a.false")
是有意义且比从toArray()
到filter()
的链式调用更易读的。 - Frédéric Hamidi.filter
调用也慢得要死。 - RaynosgetElementsByTagNameAndClassName()
函数出现,否则你在querySelectorAll()
之外没有太多选择,不是吗? - Frédéric Hamidi