某些浏览器中的getElementById是可选的吗?

时间:2012-11-21 12:48:24

标签: javascript html

通过window.someThing访问元素时," someThing"应该是html元素的名称。但我现在看到的是,我可以通过id以相同的方式访问元素,而无需document.getElementById。什么时候改变了?看起来它适用于Chrome,IE,Firefox 13,但不适用于Firefox 12。

例如:

<div id="MyDiv">Content</div>

<script>
    MyDiv.innerHTML = "New Content";
</script>

为什么上面的示例有效?为什么我不必这样做:

var MyDiv = document.getElementById('MyDiv');

这是新的东西,还是一直有可能,我只是不知道呢?

4 个答案:

答案 0 :(得分:4)

<击> http://www.quirksmode.org/dom/w3c_core.html#gettingelements
自IE 5.5

以来(大部分)已实施

我无法找到有关将ID用作变量名称的任何信息。我建议坚持getElementById("MyDiv").doSomething而不是MyDiv.doSomething,以提高兼容性。 特别是在编写较大的脚本时,可能会将变量名称与页面中使用的id混合使用。 getElementById确保您“获取”DOM元素。

答案 1 :(得分:1)

这不是JavaScript中的标准行为。当像var MyDiv一样添加变量时,变量被添加到window对象中,以便可以直接访问它,就好像它是属性一样,但是从不添加DOM元素。我个人并不知道新行为的原因,但我的猜测是它只是语言引擎功能的扩展。如果您真的想知道行为应该是什么,您可以随时阅读标准:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

编辑另外,请注意,用于获取元素的方法是document.getElementById(),它来自文档对象模型。你所指的方法是在窗口对象中放置一个id,它可以通过id创建冲突。标准定义的方法是从document获取元素,并避免将内容放入window。以这种方式使用window对象类似于使用全局变量(这是一种不好的做法:http://www.javascripttoolbox.com/bestpractices/#namespace

答案 2 :(得分:1)

避免它!

这似乎是一个了不起的功能,但我建议不要使用它,因为如果你的id与某些全局JS变量的id相同,那么它会有冲突,并且还会混淆其他第三方JS文件中的内容你包括。

但是你总是随身携带jQuery选择器而不要忘记现代浏览器中的新querySelector功能:)

答案 3 :(得分:1)

您可以在此处找到答案:Can I Use an ID as a Variable Name?

简而言之,避免它。

它起作用的原因是因为浏览器实际上创建了一个变量window.document.myDiv