研究一个简单的HTMLElement包装器的想法我偶然发现了Internet Explorer和Chrome的以下内容:
对于DOM树中具有ID的给定HTMLElement,可以使用其ID作为变量名来检索div.所以对于一个喜欢的div
<div id="example">some text</div>
Run Code Online (Sandbox Code Playgroud)
在Internet Explorer 8和Chrome中,您可以执行以下操作:
alert(example.innerHTML); //=> 'some text'
Run Code Online (Sandbox Code Playgroud)
要么
alert(window['example'].innerHTML); //=> 'some text'
Run Code Online (Sandbox Code Playgroud)
那么,这是否意味着DOM树中的每个元素都转换为全局命名空间中的变量?它是否也意味着可以使用它作为getElementById这些浏览器中方法的替代品?
可能重复:
IE/Chrome:DOM树元素是全局变量吗?
为什么window [id] === document.getElementById(id)
我刚刚在html/javascript中遇到过一些让我感到惊讶的事情.当获得对html元素的引用时,使用javascript,我以前总是使用jQuery或document.getElementById.您还可以使用它的id直接访问元素.有人可以解释这个细微差别吗?我用Google搜索但找不到任何关于此功能的引用,每个网站都会讨论getElementById.
以下页面代码段说明了这一点.
<html>
<head>
</head>
<body>
<input type="button" value="getElement" onclick="document.getElementById('blah').innerText = 'getElementById'" />
<input type="button" value="direct" onclick="blah.innerText = 'direct';" />
<div id="blah"></div>
</body>
Run Code Online (Sandbox Code Playgroud)
提前谢谢了.
无意中,我注意到我可以id在JavaScript代码中使用HTML元素.所以不是这样的:
var myCanvas = document.getElementById('myCanvas');
myCanvas.width = '600';
myCanvas.height = '400';
Run Code Online (Sandbox Code Playgroud)
我甚至可能根本没有第一行,因为变量myCanvas显然已经存在!
myCanvas.width = '600';
myCanvas.height = '400';
Run Code Online (Sandbox Code Playgroud)
这很好,但我能依靠它吗?这是我在所有现代浏览器中可以预期的正常行为吗?我不关心IE9之前的任何浏览器.