Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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 document.querySelector是如何实现的?_Javascript_Algorithm_Dom_Browser_Tree - Fatal编程技术网

Javascript document.querySelector是如何实现的?

Javascript document.querySelector是如何实现的?,javascript,algorithm,dom,browser,tree,Javascript,Algorithm,Dom,Browser,Tree,我想这个问题的答案取决于你使用的浏览器,但我想这会让它更有趣 我想知道这个方法实际上是如何实现的。类似地,我对和等其他方法很好奇 它是深度优先搜索、广度优先搜索,还是利用一些辅助数据结构(如全局哈希表)作为注册表?一旦提取HTML文档,它将传递给HTML解析器,该解析器将遍历文档并创建内容树 这个内容树实际上是一个全局哈希表,许多本机函数都使用它 此信息适用于Firefox您要求的所有信息都在您提供的链接中: querySelector:返回文档中与指定选择器组匹配的第一个元素(使用文档节点的深

我想这个问题的答案取决于你使用的浏览器,但我想这会让它更有趣

我想知道这个方法实际上是如何实现的。类似地,我对和等其他方法很好奇


它是深度优先搜索、广度优先搜索,还是利用一些辅助数据结构(如全局哈希表)作为注册表?

一旦提取HTML文档,它将传递给HTML解析器,该解析器将遍历文档并创建内容树

这个内容树实际上是一个全局哈希表,许多本机函数都使用它

此信息适用于Firefox

您要求的所有信息都在您提供的链接中: querySelector:返回文档中与指定选择器组匹配的第一个元素(使用文档节点的深度优先预先顺序遍历|按文档标记中的第一个元素,并按子节点的数量顺序遍历顺序节点)


querySelectorAll:返回文档中与指定选择器组匹配的元素列表(使用文档节点的深度优先顺序遍历)。返回的对象是节点列表


getElementById:通过元素的ID返回对元素的引用;ID是一个字符串,可用于标识元素;可以使用HTML中的id属性或脚本来建立它

由于ID应该是唯一的,因此没有顺序问题


GetElementsByCassName:返回具有所有给定类名的所有子元素的类似数组的对象。在document对象上调用时,将搜索整个文档,包括根节点。也可以对任何元素调用GetElementsByCassName();它将只返回具有给定类名的指定根元素的后代元素


querySelectorAll
在这里有详细的文档记录:

返回文档中与指定选择器组匹配的元素列表(使用文档节点的深度优先顺序遍历)。返回的对象是节点列表

另一方面,
getElementsByClassName

没有同样的保证

事实上,我在一些较旧的浏览器上遇到了这样的问题——在各种浏览器上以一种破坏性的方式返回内容。不过,这可以追溯到IE6,并可能在HTML5 doctype下得到稳定

如果必须100%确保文档顺序,则始终存在旧的walkTheDom代码

facepalm我想我读过了,因为我自己确信关于规范的文档不会包括关于实现的文档。不知道是删除问题还是保留问题。