Microsoft JScript运行时错误:对象不支持IE9中的属性或方法“getElementsByTagName”

时间:2013-05-22 07:12:17

标签: javascript asp.net treeview

我有一个带有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;
}

感谢有人能帮助我解决这个问题!提前谢谢......

1 个答案:

答案 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;
}