我真的需要调用getElementById()吗?

Ale*_*ack 13 javascript

可能重复:
IE/Chrome:DOM树元素是全局变量吗?

我在浏览器中偶然发现了一个意外但有用的行为:它为我的html代码中具有ID的每个元素创建一个变量.所以当我有:

<div id="ohlala"> ... </div>
Run Code Online (Sandbox Code Playgroud)

浏览器似乎在幕后运行此代码:

var ohlala = document.getElementById("ohlala");
Run Code Online (Sandbox Code Playgroud)

所以我可以通过以下方式轻松更改该元素的文本:

ohlala.innerHTML="test"
Run Code Online (Sandbox Code Playgroud)

在网上尝试:http://jsfiddle.net/Facby/ 问题是:为什么我需要自己写这个document.getElementById()位?该代码的可移植性如何?我在Opera,FireFox和Chrome上试过,它有效!我可以依靠这个功能吗?浏览器是否总是为每个具有id的元素创建变量?在这种情况下,我必须更加小心我的javascript代码中使用的名称不要与HTML中的类似ID冲突,对吧?

mic*_*nic 5

创建带有 ID 的元素时,“window”对象接收特定属性,这就是您可以直接使用变量的原因,此行为已被弃用,通常是这样编写的:window.ohlala.innerHTML = "...", 浏览器保留此行为以与某些旧代码兼容网站,但不建议在现代网站中使用它,始终使用 .getElementById() 方法,该方法是 W3C 标准的一部分,您可以在所有现代浏览器中使用它,在一些非常旧的浏览器版本和 < IE7不起作用。在此处了解有关 DOM(文档对象模型)的更多信息:https : //developer.mozilla.org/en-US/docs/DOM

  • @micnic你注意到这个问题不涉及`document.getElementById()`,而是浏览器在dom中隐式生成一个变量而不必调用`document.getElementById()`? (3认同)