我有一个带有TreeView控件的页面,并且检查了父节点,也会检查子节点。它是使用javascript完成的。但是当打开页面是IE9并尝试检查父节点时,我将收到错误:
Microsoft JScript运行时错误:对象不支持属性或方法'getElementsByTagName'
function AreAllSiblingsChecked(chkBox)
{
var parentDiv = GetParentByTagName("div", chkBox);
var childCount = parentDiv.childNodes.length;
for(var i=0;i<childCount;i++)
{
var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
//if any of sibling nodes are not checked, return false
if(prevChkBox.checked)
{
return true;
}
}
return false;
}
//utility function to get the container of an element by tagname
function GetParentByTagName(parentTagName, childElementObj)
{
var parent = childElementObj.parentNode;
while(parent.tagName.toLowerCase() != parentTagName.toLowerCase())
{
parent = parent.parentNode;
}
return parent;
}
感谢有人能帮助我解决这个问题!提前谢谢......
答案 0 :(得分:0)
在IE9中,childNodes []返回文本节点(注释或空格)以及子标记。文本节点不支持getElementsByTagName()。对底层DOM模型here进行了很好的总结。
最简单的解决方法是在使用之前检查方法是否存在:
function AreAllSiblingsChecked(chkBox)
{
var parentDiv = GetParentByTagName("div", chkBox);
var childCount = parentDiv.childNodes.length;
for(var i=0;i<childCount;i++)
{
if (parentDiv.childNodes[i].getElementsByTagName) {
var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
//if any of sibling nodes are not checked, return false
if(prevChkBox.checked)
{
return true;
}
}
}
return false;
}