在用js作编辑功能时候,发现一种奇怪的写法。用到了没有定义的变量来直接操做dom,查询以后html
发现这个小的知识点。web
标签有id这个属性,不使用getElementById方法,也能够直接用id获取dom元素。并且最让我意
外的是浏览器支持程度,Firefox、chrome支持不意外,意外的是IE竟然7-11都支持 。chrome
这是由于,若是在HTML文档中用id属性来为元素命名,而且若是Window对象没有此名字的属性,
Window对象会赋予一个属性,它的名字就是id属性的值,而它们的值指向表示文档元素的HTMLElement浏览器
对象。dom
在客户端Javascript中,Window对象是以全局对象的形式存在于做用域链的最上层,这就意味着
在HTML文档中使用的id属性会成为被脚本访问的全局变量。若是文档包含一个<div id='box'>元素,code
那么就能够经过全局变量box来引用此元素。htm
可是,有一个很重要的警告,若是Window对象已经具备此名字的属性,这就不会发生。好比,id
是“history”,“location”的元素,就不会以全局变量的的形式出现,由于这些id已经被占用了。对象
一样,若是HTML文档包含一个id为“x”的元素,而且在代码中声明并赋值给全局变量x,那这个变量ip
的存在就会阻止元素获取它的window属性,而若是脚本中的变量声明出如今命名元素以后,那么变量作用域
的显示赋值会覆盖该属性的隐式值。
元素id做为全局变量的隐式应用是web浏览器演化过程当中遗留的怪癖。它主要是出于与已有web页
面后向兼容性的考虑,但这里并不推荐使用这种作法。浏览器厂商能够在任什么时候候为window对象定义
新属性,而这些新属性都会破坏使用了此属性名的隐式定义的代码。
因此,但愿经过id名来获取dom元素,最好仍是使用document.getElementById(),这是一个
document对象的方法,能够经过它来得到指定id的html元素。更多技术资讯可关注:gzitcast