Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

直接通过id访问元素的一些问题

  当HTML元素存在id属性时,在window对象上会以这个元素的id定义这个元素的引用,而且这个特性在目前所有浏览器上都可以兼容。于是大家可能就会想,为什么还要getElementById呢?我也不知道这种写法到底是什么规范,但确实存在问题。
  首先有一个很典型的例子,IFRAME元素在IE上的问题
<iframe id="ifr" src="about:blank"></iframe>
<script>
console.log(document.getElementById("ifr"));
console.log(ifr)
</script>

  通过getElementById得到的永远是Element,但是IFRAME元素在IE上直接通过id从全局对象上获取到的却是该IFRAME里面的包含页面的window对象。这就是一个直接通过id获取不到元素的典型例子。
  不仅是IE,在其它浏览器上也有一些问题。当多个元素使用同一个id时,访问这个id会变成这些同id元素的集合。
<div id="a">1</div>
<div id="a">2</div>
<div id="b">3</div>
<script>
console.log(a instanceof HTMLCollection);
console.log(b instanceof HTMLDivElement);
</script>

  总之,直接以id为属性名从全局对象上取元素的方法存在各种问题,所以真实场合还是应该使用getElementById
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^