1

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

感谢有人可以帮我解决这个问题!提前致谢...

4

1 回答 1

0

在 IE9 中,childNodes[] 返回文本节点(注释或空格)以及子标签。文本节点不支持 getElementsByTagName()。这里对底层 DOM 模型进行了很好的总结。

最简单的解决方法是在使用之前检查该方法是否存在:

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;
}
于 2013-06-24T18:05:52.740 回答