javascript - getElementById 和简单地使用元素的 ID 作为变量有什么区别?

标签 javascript dom reference

有人能告诉我用 id="myDomObect"调用 HTML 元素的区别吗?:

var myObj = document.getElementById('myDomObect');

&

var myObj = myDomObect;

最佳答案

使用第一种形式包装器,例如 jQuery。第二种形式,

var myObj = myDomObect;

转换为

var myObj = window["myDomObect"];

这个“有效”是因为一个旧的,旧的 hack,其中 ID 作为全局窗口属性公开(IIRC 从一开始就是一个错误),因此我们仍然对行为 20 感到幸运多年后......是的,它在最新的 Chrome 中运行。

但是,出于多种原因,不应使用这样的简写形式:

  1. 它不会像最初在“严格模式”中写的那样工作(但它会在第二种形式下工作)

  2. 它不传达操作 - 即请求/获取 DOM 元素(通过 ID)。

  3. 它不适用于与窗口属性冲突的 ID;例如。 <div id=history></div>如果以这种方式访问​​,将导致“意外行为”。 (这不会影响在函数中正确使用本地 var 变量的 getElementById 代码。)

  4. 当文档中存在重复 ID 时,行为未定义( 允许); getElementById 的行为已由 DOM 4 编码:"getElementById(elementId) method must return the first element [with the ID], in tree order.."


另见:

关于javascript - getElementById 和简单地使用元素的 ID 作为变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26331906/

相关文章:

javascript - 在 Firefox 中运行 Protractor

jquery - 检查元素是否在 jQuery 中的另一个元素之前或之后

XML 解析性能 DOM 与 XOM

perl - 子程序调用前的反斜杠

c++ - stdio.h 头文件的详细引用

javascript - php javascript过滤内容

javascript - Angularjs 重新渲染整个页面 [ionic]

javascript - 我怎样才能让这个 plunker 可以运行?

jQuery 追加顺序?

c# - 在 XML 代码注释中引用泛型类型