【分享】小心IE 下document.getElementById()的陷阱

WebAdvocate 2010-07-22 05:49:58
document.getElementById() 方法,我们都很熟悉的,这个方法可以使用一个元素的 ID 获取这个元素的 DOM 对象。W3C规定这个方法只能以 ID 为参数,但是 MSDN 中对此方法的定义确是返回第一个 ID 或 name 为参数的 DOM 与元素。看,MSDN里的说明:http://msdn.microsoft.com/en-us/library/ms536437(VS.85).aspx

因为这个差异,会造成这个方法的兼容性问题。当使用元素的 name 获取元素对象的时候,就会产生这个问题,IE支持,Safari 和 Chrome 等都不支持。

请看下面的代码:
<input type="button" id="inputid" name="inputname" value="test">
<script>
window.onload = function() {
alert(document.getElementById("inputname"));
}
</script>

上面这段代码中,使用了 INPUT 元素的name属性来获取它的DOM元素。

这段代码在IE6(S)(Q) 、IE7(Q)(S)和IE8(Q)中,都返回一个 object类型的对象。但是在其他浏览器中返回一个 null。

有兴趣的同学可以尝试把 INPUT 元素换成其他类型的元素试试,这个问题还可能跟类型有关系呢。

为了避免这个兼容性问题,以免造成功能性问题,最好使用 ID 作为该方法的参数。

更多兼容性问题:【分享】浏览器兼容性问题目录
...全文
2169 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
reciment 2011-07-12
  • 打赏
  • 举报
回复
LZ 共享下IE如何才能样式间的兼容啊。。。。。
sean20032000 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bhbhxy 的回复:]

<input type="button" id="inputid" name="inputname" value="test">
<script>
window.onload = function() {
alert(document.getElementById("inputname"));
}
</script>
不明白了,为什么要用getEl……
[/Quote]
是的 ,本来就是要求得id的,偏偏要用name
zc_china 2010-08-29
  • 打赏
  • 举报
回复
顶起~~~~~~~~~~~~~
tfcoder 2010-08-12
  • 打赏
  • 举报
回复
初学 看不懂
jamiejiayou 2010-07-23
  • 打赏
  • 举报
回复
先顶了 一年后理解
bhbhxy 2010-07-23
  • 打赏
  • 举报
回复
<input type="button" id="inputid" name="inputname" value="test">
<script>
window.onload = function() {
alert(document.getElementById("inputname"));
}
</script>
不明白了,为什么要用getElementById方法去取name,而不是ID呢?
skypc_3587 2010-07-23
  • 打赏
  • 举报
回复
嗯 Id获取得到的是唯一的 而name获取得到的确实一个数组
kaifadi 2010-07-23
  • 打赏
  • 举报
回复
挂机的广告,靠,忽悠!
chen870201 2010-07-23
  • 打赏
  • 举报
回复
不怎么熟悉的方法
hammer_fo 2010-07-23
  • 打赏
  • 举报
回复
学习了
saful 2010-07-22
  • 打赏
  • 举报
回复
看不懂
yjxyang 2010-07-22
  • 打赏
  • 举报
回复
谢谢分享!值得学习!
无伤 2010-07-22
  • 打赏
  • 举报
回复
id 是唯一的, 但name却可以返回一个数组。
ljyljyhopewell 2010-07-22
  • 打赏
  • 举报
回复
看不懂啊
WebAdvocate 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sandy945 的回复:]

标题叫 小心IE 下document.getElementById()的陷阱 会更好些

HTML code

<html>
<head>
<meta content="分享 看看你是否错误 使用了 getElementById 方法 Web 开发 跨浏览器开发" name="Keywords"/>
</head>
<body>
<div id='Keywords'>
abc
</div>……
[/Quote]多谢提醒 呵呵
阿非 2010-07-22
  • 打赏
  • 举报
回复
标题叫 小心IE 下document.getElementById()的陷阱 会更好些


<html>
<head>
<meta content="分享 看看你是否错误 使用了 getElementById 方法 Web 开发 跨浏览器开发" name="Keywords"/>
</head>
<body>
<div id='Keywords'>
abc
</div>
<script>
alert(document.getElementById('Keywords').innerHTML);
</script>
</body>
</html>


tigerhu76 2010-07-22
  • 打赏
  • 举报
回复
ie8就不行了,必须要用id

5,007

社区成员

发帖
与我相关
我的任务
社区描述
解读Web 标准、分析和讨论实际问题、推动网络标准化发展和跨浏览器开发进程,解决各种兼容性问题。
社区管理员
  • 跨浏览器开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧