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

时间:2014-10-13 01:54:52

标签: javascript dom reference

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

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

&安培;

var myObj = myDomObect;

2 个答案:

答案 0 :(得分:7)

使用第一个表单包装器(如jQuery)。第二种形式,

var myObj = myDomObect;

转换为

var myObj = window["myDomObect"];

这是“有效的”,因为旧的,旧的黑客,其中ID被暴露为全局窗口属性(IIRC从一开始就是错误的),因此我们仍然幸运的行为20多年以后......是的,它在最新的Chrome中运行。

但是,出于多种原因 这样的简写应该

  1. 它不会像最初用“严格模式”那样工作(但它适用于第二种形式)

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

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

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


  5. 另见:

答案 1 :(得分:0)

首先是&#34;真实&#34; DOM API有效(另一个选项是document.querySelector("#myDomObject"))。第二个是浏览器如何开始实现id&n; d元素的自动提升,因为ID应该是唯一的。在&#34;你在想什么&#34;,这可能导致热闹的冲突,其中与具有id don&#t; 的HTML元素具有相同名称的变量优先于你使用的变量突然是一个HTML元素。