Javascript ID为的DOM树元素是否成为全局变量?

Javascript ID为的DOM树元素是否成为全局变量?,javascript,dom,global-variables,getelementbyid,identifier,Javascript,Dom,Global Variables,Getelementbyid,Identifier,在构思一个简单的HtmleElement包装器时,我偶然发现InternetExplorer和: 对于DOM树中ID为的给定HtmleElement,可以使用其ID作为变量名检索div。所以对于一个像 <div id="example">some text</div> 或 那么,这是否意味着DOM树中的每个元素都转换为全局名称空间中的变量?这是否也意味着可以在这些浏览器中使用它来替代getElementById方法?在这些情况下,您应该坚持使用getElementByI

在构思一个简单的HtmleElement包装器时,我偶然发现InternetExplorer和:

对于DOM树中ID为的给定HtmleElement,可以使用其ID作为变量名检索div。所以对于一个像

<div id="example">some text</div>


那么,这是否意味着DOM树中的每个元素都转换为全局名称空间中的变量?这是否也意味着可以在这些浏览器中使用它来替代
getElementById
方法?

在这些情况下,您应该坚持使用
getElementById()
,例如:

document.getElementById('example').innerHTML

IE喜欢在全局命名空间中混合具有
name
ID
属性的元素,因此最好明确说明您试图获取的内容。

在这些情况下,您应该坚持使用
getElementById()
,例如:

document.getElementById('example').innerHTML

IE喜欢在全局命名空间中混合具有
name
ID
属性的元素,因此最好明确说明您试图获取的内容。

应该发生的是,“命名元素”被添加为
文档
对象的明显属性。这是一个非常糟糕的主意,因为它允许元素名称与
文档的真实属性冲突

IE还添加了命名元素作为
窗口
对象的属性,使情况变得更糟。更糟糕的是,现在必须避免以
文档
窗口
对象(或项目中的任何其他库代码)的任何成员命名元素

这也意味着这些元素作为全局变量可见。幸运的是,在这种情况下,代码中任何真正的全局
var
函数
声明都会将它们隐藏起来,因此您不必太担心在这里命名,但是如果您尝试使用冲突名称对全局变量赋值,却忘记了声明
var
,当IE试图将值分配给元素本身时,您将在IE中得到一个错误

通常认为,省略
var
,以及依赖在
窗口中可见或作为全局变量的命名元素是不好的做法。坚持使用
document.getElementById
,它得到了更广泛的支持,并且不那么模棱两可。如果您不喜欢键入,可以用较短的名称编写一个简单的包装函数。无论哪种方式,使用id到元素查找缓存都没有意义,因为浏览器通常会优化
getElementById
调用以使用快速查找;当元素更改
id
或从文档中添加/删除时,您只会遇到问题

Opera复制了IE,然后WebKit加入,现在,以前不规范的将命名元素放在
文档
属性上的做法,以及以前IE唯一将命名元素放在
窗口
上的做法都是通过HTML5实现的,他们的方法是记录和标准化浏览器作者给我们造成的每一个可怕的行为,使他们永远成为网络的一部分。所以Firefox4也支持这一点


什么是“命名元素”?具有
id
的任何内容,以及用于“识别”目的的具有
名称的任何内容:即表单、图像、锚和其他一些内容,但不包括
名称
属性的其他不相关实例,如表单输入字段中的控件名称、
中的参数名称或
中的元数据类型识别“
名称”
s是应该避免的,以利于
id

应该发生的是,“命名元素”被添加为
文档
对象的明显属性。这是一个非常糟糕的主意,因为它允许元素名称与
文档的真实属性冲突

IE还添加了命名元素作为
窗口
对象的属性,使情况变得更糟。更糟糕的是,现在必须避免以
文档
窗口
对象(或项目中的任何其他库代码)的任何成员命名元素

这也意味着这些元素作为全局变量可见。幸运的是,在这种情况下,代码中任何真正的全局
var
函数
声明都会将它们隐藏起来,因此您不必太担心在这里命名,但是如果您尝试使用冲突名称对全局变量赋值,却忘记了声明
var
,当IE试图将值分配给元素本身时,您将在IE中得到一个错误

通常认为,省略
var
,以及依赖在
窗口中可见或作为全局变量的命名元素是不好的做法。坚持使用
document.getElementById
,它得到了更广泛的支持,并且不那么模棱两可。如果您不喜欢键入,可以用较短的名称编写一个简单的包装函数。无论哪种方式,使用id到元素查找缓存都没有意义,因为浏览器通常会优化
getElementById
调用以使用快速查找;当元素更改
id
或从文档中添加/删除时,您只会遇到问题

Opera复制了IE,然后WebKit加入,现在,以前不规范的将命名元素放在
文档
属性上的做法,以及以前IE唯一将命名元素放在
窗口
上的做法都是通过HTML5实现的,他们的方法是记录和标准化浏览器作者给我们造成的每一个可怕的行为,使他们永远成为网络的一部分。所以Firefox4也支持这一点

什么是“命名元素”?任何具有
id
的内容,以及任何具有
名称
用于“识别”目的的内容:即表单、图像、锚定和一些其他内容,但不包括
名称
属性的其他不相关实例,如
document.getElementById('example').innerHTML
<!DOCTYPE html>
<html>
<head>
</head>
<body>
  <div id="im_not_particularly_happy_with_that">
    Hello World!
  </div>
  <script>
    im_not_particularly_happy_with_that.innerText = 'Hello Internet!';
  </script>
  <!-- Looking at you W3 HTML5 spec group ಠ_ಠ -->
</body>
</html>