javascript变量对应于具有相同ID的DOM元素

use*_*494 16 javascript dom

我是javascript的新手,我刚刚发现了一个我从未见过的javascript行为.如果我有一个带有指定id的DOM元素,比如"x",那么在我的javascript中,该元素会自动分配给变量x.我在chrome和safari中看到了这一点.这是javascript的文档功能吗?

例如:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id='x'>
<input type='text' name='info' id='info'/>
<input type='submit' name='submit' value='Complete'/>
</form>
<script type='text/javascript'>
  window.onload = function() {
    alert( x==document.getElementById('x') );
    info.value = 'Test me!';
  }
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

加载后,它会提示为true,输入区域将显示"Test me!".如果这是正确的行为,为什么我们需要document.getElementById呢?

Šim*_*das 10

HTML标准(第6.2.4节)中记录了此行为.

标准定义了"命名元素",它们是具有一个nameid属性集的HTML元素.(请注意,该name属性仅在某些类型的HTML元素上定义.)

对于每个命名元素,浏览器(环境)定义相应的全局属性.

  • 截至我的评论,Chrome和Firefox实现了这种行为,但IE11却没有.我必须承认,直到现在我才知道这个功能. (3认同)

SLa*_*aks -3

这是 IE 独有的非标准功能。

不要依赖它。

  • 这不是非标准的:http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#dom-window-nameditem 请参阅项目符号:*“具有 id 内容的 HTML 元素值为 name 的属性。"* (3认同)
  • 这*不*仅适用于 IE,请使用 http://jsfiddle.net/KooiInc/ghY99/ 在其他浏览器中尝试。 (3认同)
  • 此行为存在于 IE9、Chrome、Opera 和 Safari 中。只有 Firefox 4 没有实现这一点。请参阅此处:http://jsfiddle.net/WbwEC/ (2认同)