有人可以向我解释一下HTML getElementById()方法的内部实现吗? 是遍历整个DOM树来查找指定的元素还是它足够智能以便先查找附近的元素?
谢谢
答案 0 :(得分:7)
这取决于浏览器,但最有可能使用来自id->元素的哈希映射。确实存在许多具有重复ID的无效页面。但是,浏览器仍然只返回一个元素,而不是集合。
我不知道“靠近元素”是什么意思,因为该方法只存在于document
上。
如果您有兴趣,可以找到免费软件浏览器的实现,例如Firefox和Chrome。
答案 1 :(得分:6)
实现完全(呃)依赖于实现。有些浏览器可能会使用hashmap或类似的,或者它们可能没有(因为虽然id
是required to be unique,但是有许多编写得不好的页面会提供带有重复id
s的无效标记)。 Internet Explorer 6和7甚至不会将getElementById
限制为id
值conflate namespaces terribly,尽管Microsoft已经清楚地看到了这一点,IE8和IE9都改进了这一点。
对于实现开源的浏览器,您当然可以找到答案。 Here's a link to the WebKit source和here's one to Mozilla's (该行号可能略有不同,如果您没有在其上登陆,只需搜索GetElementById
和GetElementByIdInternal
)< / em>的。这两个都来自this related answer here on StackOverflow。 (事实上,考虑到这个问题,我认为这个问题可能是重复的,尽管Matthew在下面的评论中指出,事情发展得足够快,以至于它可能证明更新是合理的......)
答案 2 :(得分:1)
这取决于。该方法由每个Web浏览器供应商实现,因此细节可能彼此不同,并且可能从浏览器的一个版本到另一个版本。
我建议您查看Mozilla Firefox等浏览器的源代码,看看是否可以找到实现。