9

通过 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

4 回答 4

4

http://www.quirksmode.org/dom/w3c_core.html#gettingelements
自 IE 5.5 以来(大部分)已实现

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

于 2012-11-21T12:51:14.697 回答
1

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

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

于 2012-11-21T12:55:20.523 回答
1

躲开它!

这似乎是一个了不起的功能,但我建议不要使用它,因为如果您的 div 的 id 与某些全局 JS 变量的 id 相同,则会发生冲突,并且还会弄乱您包含的其他一些第三方 JS 文件中的内容.

但是您始终拥有 jQuery 选择器,并且不要忘记现代浏览器中的新 querySelector 功能 :)

于 2012-11-21T12:59:06.450 回答
1

您可以在这里找到答案:我可以使用 ID 作为变量名吗?

简而言之,避免它。

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

于 2012-11-21T13:05:57.133 回答