Javascript 默认情况下名称或id可用的元素
我今天带来了一些代码,我很确定它不会起作用。结果我错了。这适用于IE和ChromeJavascript 默认情况下名称或id可用的元素,javascript,html,Javascript,Html,我今天带来了一些代码,我很确定它不会起作用。结果我错了。这适用于IE和Chrome <img onmouseover="why(this)" src="http://placehold.it/150x100" alt="" /> <img onmouseover="why(this)" src="http://placehold.it/100x100" alt="" /> <br> <img id="preview" src="" alt="" />
<img onmouseover="why(this)" src="http://placehold.it/150x100" alt="" />
<img onmouseover="why(this)" src="http://placehold.it/100x100" alt="" />
<br>
<img id="preview" src="" alt="" />
<img name="preview2" src="" alt="" />
为什么这样做有效?我们不是应该使用document.getElementById
?这是因为默认情况下,所有具有
id
s的元素都会转储到窗口
对象上,使用它们的id
作为属性名。有些浏览器对name
执行相同的操作。由于窗口
对象是浏览器中的全局对象,这些看似独立的变量被解析为窗口
的属性
这不是一件值得依赖的事情,因为全局名称空间非常拥挤,而且很容易隐藏这些名称空间。例如:
function preview() { }
现在,具有id
preview
的元素不再可用作全局符号,因为我已使用函数对其进行了阴影处理。或
var preview;
轰,它不见了
因此,在查找元素时使用document.getElementById
等
下面是您的评论:
当我检查窗口对象时,我找不到属性预览。一旦我在函数why中放置断点,window.preview就会突然被定义。知道这是怎么回事吗
我刚刚添加了
window.preview
作为一个监视表达式,它返回undefined
,直到我点击brekpoint
我希望在解析这些元素时创建属性。因此,这取决于您何时停止并查看窗口
:如果您在解析器到达那些DOM元素之前查看它,那么这些属性将是未定义的
。这就是我在本页中看到的:
草稿行
调试器;
调试器;
从第一个
调试器开始代码>语句,一个手表(也使用Chrome的devtools)在窗口上。testelement
显示未定义的,但从第二个调试器开始代码>语句,它显示div元素。这应该回答您的问题:当我检查窗口对象时,我找不到属性preview
。一旦我在函数why
中放置断点,就会突然定义window.preview
。你知道这是怎么回事吗?@Jonathan:你是怎么检查窗户的?这些属性仅在JavaScript层中可用,在DOM层中不可用……我刚刚添加了窗口。preview
作为一个监视表达式,它返回未定义的,直到我点击brekpoint。(使用Chrome devtools测试)@Jonathan:我在答案的末尾添加了一个更新。该死,我想我只是在看JSIDdle的window
对象,window
刚切换到iframe
JSIDdle在遇到断点时使用的。。。
var preview;