在我编写的一段示例代码中
var as = toArray(document.getElementsByClassName("false")).filter(function (el) {
return el.tagName === "A";
});
我以为我可以用
替换它 var as = document.querySelectorAll("a.false");
现在阅读以下事实后
qsa
而不是document.querySelectorAll
,因为我很懒。问题:我应该什么时候使用QSA而不是常规方法?
很明显,如果您执行qsa("a")
或qsa(".class")
或qsa("#id")
您做错了,因为有更好的方法(byTagName,byClassName,byId)。
同样清楚qsa("div > p.magic")
是一个明智的用例。
问题:但qsa("tagName.class")
是QSA的一个很好的用例吗?
除此之外,还有一些名为NodeIterator
我问了一个关于QSA vs NodeIterator
的问题答案 0 :(得分:2)
当gEBI,gEBN,gEBCN无效时,你应该使用QSA,因为你的选择器很复杂。
QSA与DOM解析是一个偏好问题,以及您将如何处理返回的数据集。
答案 1 :(得分:1)
如果浏览器支持不是问题,我会在任何地方使用它。为什么要使用4种不同的方法(... byId,... byTagName,... byClassName)。
QSA似乎是slower(... byId),但仍然只需要几毫秒或更短的时间。大多数时候你只叫它几次,所以不是问题。当你遇到速度瓶颈时,你总是可以用适当的另一个替换QSA。
答案 2 :(得分:0)
我为你准备了一些测试。看起来QSA要慢很多。但如果你没有那么称呼它,那应该不是问题。
编辑 - jsperf版