【问题标题】:do I really need to call getElementById()? [duplicate]我真的需要调用 getElementById() 吗? [复制]
【发布时间】: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,要么将getElementById only 用于某些 id。
  • 在多种形式下都会有问题。我们有时会使用 document.form[].element
  • 问题(除了这是非常糟糕的做法)是你会像@lanzz 所说的那样混淆变量。你怎么知道ohlaha 是什么?你将不得不猜测

标签: javascript


【解决方案1】:

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

【讨论】:

  • 那会是哪个特定的 W3C 标准?
  • 你能指出这个行为被标准化的文档吗?
  • 您可以在此处找到所有 W3C 标准:w3c.orggetElementById 在 DOM 级别 1 中针对 HTML 文档引入,并移至 DOM 级别 2 中的所有文档:w3.org/TR/DOM-Level-2-Core/core.html#ID-getElBId
  • @micnic 你注意到这个问题与document.getElementById()无关,而是浏览器在dom中隐式生成一个变量而不必调用document.getElementById()?
  • @micnic 好的,我想你误解了这个问题。随意删除您的答案...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2020-01-29
  • 2011-01-28
  • 1970-01-01
  • 2016-02-16
  • 2012-01-12
  • 2011-02-27
相关资源
最近更新 更多