GetElementByID()的实现是什么?

时间:2011-01-02 11:04:49

标签: javascript html dom

有人可以向我解释一下HTML getElementById()方法的内部实现吗? 是遍历整个DOM树来查找指定的元素还是它足够智能以便先查找附近的元素?

谢谢

3 个答案:

答案 0 :(得分:7)

这取决于浏览器,但最有可能使用来自id->元素的哈希映射。确实存在许多具有重复ID的无效页面。但是,浏览器仍然只返回一个元素,而不是集合。

我不知道“靠近元素”是什么意思,因为该方法只存在于document上。

如果您有兴趣,可以找到免费软件浏览器的实现,例如Firefox和Chrome。

答案 1 :(得分:6)

实现完全(呃)依赖于实现。有些浏览器可能会使用hashmap或类似的,或者它们可能没有(因为虽然idrequired to be unique,但是有许多编写得不好的页面会提供带有重复id s的无效标记)。 Internet Explorer 6和7甚至不会将getElementById限制为idconflate namespaces terribly,尽管Microsoft已经清楚地看到了这一点,IE8和IE9都改进了这一点。

对于实现开源的浏览器,您当然可以找到答案。 Here's a link to the WebKit sourcehere's one to Mozilla's (该行号可能略有不同,如果您没有在其上登陆,只需搜索GetElementByIdGetElementByIdInternal)< / em>的。这两个都来自this related answer here on StackOverflow(事实上,考虑到这个问题,我认为这个问题可能是重复的,尽管Matthew在下面的评论中指出,事情发展得足够快,以至于它可能证明更新是合理的......)

答案 2 :(得分:1)

这取决于。该方法由每个Web浏览器供应商实现,因此细节可能彼此不同,并且可能从浏览器的一个版本到另一个版本。

我建议您查看Mozilla Firefox等浏览器的源代码,看看是否可以找到实现。