Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 何时使用querySelectorAll_Javascript_Dom_Qsa_Dom4 - Fatal编程技术网

Javascript 何时使用querySelectorAll

Javascript 何时使用querySelectorAll,javascript,dom,qsa,dom4,Javascript,Dom,Qsa,Dom4,在我编写的一段示例代码中 var as = toArray(document.getElementsByClassName("false")).filter(function (el) { return el.tagName === "A"; }); 我想我可以用 var as=document.querySelectorAll(“a.false”) 现在在阅读了以下事实之后 假装浏览器支持不是问题(我们有填隙片和多边形填充) 假设您的jQuery不是通用的,您应该使用QSA来获取每

在我编写的一段示例代码中

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的一个很好的用例吗

除此之外,还有一些东西叫做


我问了一个关于

的问题,如果浏览器支持不是问题,我会在任何地方使用它。如果可以只使用一种方法,为什么要使用4种不同的方法(…byId,…byTagName,…byClassName)


QSA似乎是(…),但仍然只需要几毫秒或更少的时间。大多数时候,你只打了几次电话,所以这不是问题。当你遇到速度瓶颈时,你总是可以用合适的另一个替换QSA。

我已经为你设置了一些测试。看来QSA要慢得多。但是,如果你不这么说,这应该不是一个问题

编辑-jsperf版本


当gEBI、gEBN、gEBCN因选择器复杂而无法工作时,应使用QSA


QSA与DOM解析是一个偏好问题,您将如何处理返回的数据集。

作为一个旁白,我想说,在
getElementsByTagNameAndClassName()
可用之前,
querySelectorAll(“a.false”)
是有意义的,并且比
toArray()的链式调用更可读
filter()
@FrédéricHamidi对
.filter
的额外调用也非常慢。事实上,在一个假设的
getElementsByTagNameAndClassName()
出现之前,除了
querySelectorAll()
之外,你没有太多的选择,是不是?你说的较慢是指大约慢两百倍。我已经知道对于简单的选择器,QSA是愚蠢的(如前所述)@Raynos,你不应该只看彼此的相对速度。你应该看看一个呼叫需要多少毫秒。因此,在FX7中,getElementById取0.0001ms,QSA取0.02ms。除非您需要选择数千个元素,否则最终用户不会注意到任何差异。哇!毫秒数!0.02毫秒是慢的。那是整整20微秒。我最多要做100微秒的计算,为什么要100微秒呢。人类最多只能探测200毫秒。所以你可以做很多JS,但仍然允许引擎在200毫秒内重新绘制页面。这完全取决于你在做什么。如果您所需要做的只是将一些基本逻辑附加到一个静态页面,那么对QSA进行几个调用就完全可以了,这将节省您的开发时间。如果要处理数千个DOM元素和一些复杂的逻辑,就必须考虑性能。我不会说做一个或另一个是“愚蠢的”,这取决于你需要什么。请使用jsperf.com进行此类测试。对不起,给你: