当前位置: 代码迷 >> Web前端 >> IE中getElementsByTagName没法获取元素BUG
  详细解决方案

IE中getElementsByTagName没法获取元素BUG

热度:178   发布时间:2012-11-04 10:42:41.0
IE中getElementsByTagName无法获取元素BUG

代码如下:

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>

<div id="test">test</div>

</body>

<script>
var html= '<input type="checkbox" checked="checked">';
var div = document.createElement("div");
div.innerHTML = html;

var a = div.getElementsByTagName("input"); // 语句1
document.body.appendChild(div); // 语句2

document.getElementById("test").onclick = function() {
	alert(a[0]);
};

</script>
</html>

?

?

点击div[id=test],

IE6/7/8/9中弹出 undefined

Firefox/Safari/Chrome/Opera弹出 [object HTMLInputElement]

?

当把 语句1语句2 位置调换,则不重现。

?

当把?div.getElementsByTagName 换成 div.childNodes[0]div.children[0] 时,亦不重现。

?

初步判断是IE中 getElementsByTagName 的实现问题,在 MSDN 找到一段:

?

MSDN 写道
This problem occurs because the GetElementsByTagName method returns an XmlNodeList collection that registers listeners on the NodeInserted and the NodeRemoved events. For example, when you call the GetElementsByTagName method ten times, the NodeInserted and the NodeRemoved events have ten listeners. Therefore, when you call the GetElementsByTagName method multiple times, the process of inserting and removing nodes is delayed.

?

?

?

?

?

?

?

1 楼 flyer646 2010-11-29  
页面元素 还没有载入呢,当然插入不了  你的那个a还是一个空的数组
jquery里面有个
$(document).ready(
function(){

}
);
写这里面就ok,要等页面加载元素完成才可以
2 楼 lixinlixin2008 2010-11-29  
flyer646 写道
页面元素 还没有载入呢,当然插入不了  你的那个a还是一个空的数组
jquery里面有个
$(document).ready(
function(){

}
);
写这里面就ok,要等页面加载元素完成才可以


you are wrong
  相关解决方案