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

时间:2011-04-01 15:42:38

标签: 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>

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

3 个答案:

答案 0 :(得分:10)

the HTML standard (chapter 6.2.4)中记录了此行为。

标准定义“命名元素”,它们是具有nameid属性集的HTML元素。 (请注意,name属性仅在某些类型的HTML元素上定义。)

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

答案 1 :(得分:2)

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <div id="w"></div>

        <script type="text/javascript">

        alert( w );

        w = null;

        alert( w );

        </script>
    </body>
</html>

在IE8中尝试此测试。你会发现w是全局的,不能被覆盖。 改变&#34; w = null&#34; in&#34; var w = null&#34;并重新加载(清空缓存后)......

IE8在运行时检查变量并删除全局通讯员。 我真的无法等待网络开发者不再支持IE8的那一天...

提示:不要使用等于DOM元素id的变量名称.. OMG OMG

答案 2 :(得分:-2)

这是仅限IE的非标准功能。

不要依赖它。