【发布时间】:2012-09-12 16:30:43
【问题描述】:
可能重复:
IE/Chrome: are DOM tree elements global variables here?
我刚刚在浏览器中偶然发现了一个意外但有用的行为:它为我的 html 代码中具有 ID 的每个元素创建了一个变量。所以当我有:
<div id="ohlala"> ... </div>
浏览器似乎在后台运行这段代码:
var ohlala = document.getElementById("ohlala");
所以我可以通过以下方式轻松更改该元素的文本:
ohlala.innerHTML="test"
在线试用:http://jsfiddle.net/Facby/
问题是:为什么我需要自己编写document.getElementById() 位?该代码的可移植性如何?我在 Opera、FireFox 和 Chrome 中尝试过,它可以工作!我可以依赖这个功能吗?浏览器是否总是为每个具有 id 的元素创建变量?在这种情况下,我必须更加小心我的 javascript 代码中使用的名称,以免与 HTML 中的类似 id 冲突,对吧?
【问题讨论】:
-
这很常见,但 AFAIK 不是标准的。正如您想象的那样,一切都是从 Internet Explorer 开始的。 IIRC 较旧的 Firefox 版本不支持它,我对移动浏览器一无所知。
-
另外,您在
window对象上有很多预先存在的属性,定义具有与这些属性匹配的 id 的元素不会在window对象上替换它们,您会发现自己在在这种情况下,您要么必须避免使用某些 id,要么将getElementByIdonly 用于某些 id。 -
在多种形式下都会有问题。我们有时会使用 document.form[].element
-
问题(除了这是非常糟糕的做法)是你会像@lanzz 所说的那样混淆变量。你怎么知道
ohlaha是什么?你将不得不猜测
标签: javascript