通过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');
这是新的东西,还是一直有可能,我只是不知道呢?
答案 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