A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 coral菜菜 于 2018-12-2 15:09 编辑


    在用js做编辑功能时候,发现一种奇怪的写法。用到了没有定义的变量来直接操作dom,查询之后

发现这个小的知识点。

    标签有id这个属性,不使用getElementById方法,也可以直接用id获取dom元素。而且最让我意
外的是浏览器支持程度,Firefox、chrome支持不意外,意外的是IE居然7-11都支持 。
    这是因为,如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,


Window对象会赋予一个属性,它的名字就是id属性的值,而它们的值指向表示文档元素的HTMLElement


对象。

    在客户端Javascript中,Window对象是以全局对象的形式存在于作用域链的最上层,这就意味着



在HTML文档中使用的id属性会成为被脚本访问的全局变量。如果文档包含一个<div id='box'>元素,


那么就可以通过全局变量box来引用此元素。


    但是,有一个很重要的警告,如果Window对象已经具有此名字的属性,这就不会发生。比如,id



是“history”,“location”的元素,就不会以全局变量的的形式出现,因为这些id已经被占用了


同样,如果HTML文档包含一个id为“x”的元素,并且在代码中声明并赋值给全局变量x,那这个变量


的存在就会阻止元素获取它的window属性,而如果脚本中的变量声明出现在命名元素之后,那么变量


的显示赋值会覆盖该属性的隐式值。


    元素id作为全局变量的隐式应用是web浏览器演化过程中遗留的怪癖。它主要是出于与已有web页


面后向兼容性的考虑,但这里并不推荐使用这种做法。浏览器厂商可以在任何时候为window对象定义


新属性,而这些新属性都会破坏使用了此属性名的隐式定义的代码。


    所以,希望通过id名来获取dom元素,最好还是使用document.getElementById(),这是一个


document对象的方法,可以通过它来获得指定id的html元素。




点击有惊喜


  





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马