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

IT技术 javascript dom
2021-03-15 20:12:39

我是 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>

加载后,它会警告为真,并且输入区域将显示“测试我!”。如果这是正确的行为,为什么我们需要 document.getElementById 呢?

3个回答

此行为记录在HTML 标准(第 6.2.4 章)中

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

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

所以这window就是成为全局变量的目的......
2021-05-06 20:12:39
根据我的评论,Chrome 和 Firefox 实现了这种行为,但 IE11 没有。我必须承认,直到现在我才知道这个功能。
2021-05-12 20:12:39
<!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 是全局的,不能被覆盖。更改“var w = null”中的“w = null”并重新加载(清空缓存后)...

IE8 在运行前检查变量并删除全局对应项。我真的等不及 Web 开发人员不再需要支持 IE8 的那一天了...

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

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

不要依赖它。

它不是非标准的:whatwg.org/specs/web-apps/current-work/multipage/...请参阅项目符号:“具有值为名称的 id 内容属性的 HTML 元素。”
2021-04-15 20:12:39
这种行为存在于 IE9、Chrome、Opera 和 Safari 中。只有 Firefox 4 没有实现这一点。见这里:jsfiddle.net/WbwEC
2021-04-28 20:12:39
不好了!可怕的功能!我希望这是一个愚人节玩笑。
2021-04-30 20:12:39
不是仅限 IE,请使用jsfiddle.net/KooiInc/ghY99在其他浏览器中尝试
2021-05-01 20:12:39
@Marcel 这是真的。幸运的是,现有的全局属性不能被替换——如果你有 this <div id="document">,那么它document仍然指向document对象,而不是 DIV。
2021-05-14 20:12:39