检查父项是否包含ChildNodes

时间:2011-12-16 16:45:42

标签: javascript asp.net

我有一个父节点和一个子节点。 如果父级包含> = 1个子节点,那么它应该用“helllooo”确认,否则如果父级没有任何子节点则应该用“hi”确认

但是,它不会那样工作。它有时显示“hi”,有时显示“helllooo”。

以下是代码:

function childnode() {
  var treeViewData = window["<%=items.ClientID%>" + "_Data"];

  //if (treeViewData.selectedNodeID.value != ""){
  var selectedNode = document.getElementById(treeViewData.selectedNodeID.value);
  if (selectedNode.childNodes.count >= 0) {
    return confirm("heloo");
  }
  else {
    return confirm("hi");
  }

  return false; // don't send form
}   

2 个答案:

答案 0 :(得分:1)

您可能会遇到 nodes 元素之间的区别。 节点也可以是,例如文本节点或空白节点。你可能想要元素。

您还遇到count上没有NodeList这样的属性的问题。您可能正在寻找length

尝试使用selectedNode.children.length代替selectedNode.childNodes.count

(另外,您的变量selectedNode被错误命名:document.getElementById返回一个元素,而不是一个节点。)

答案 1 :(得分:0)

您需要length属性,而不是count属性。另外,我认为您的意思是> 0,而不是>= 0

var selectedNode = document.getElementById(treeViewData.selectedNodeID.value);
if (selectedNode.childNodes.length > 0) {
    return confirm("heloo");
}

这将告诉您是否有任何子节点,包括文本节点。如果您想知道是否有任何子节点是元素,您可以查看nodeType属性。

var selectedNode = document.getElementById(treeViewData.selectedNodeID.value);
var children = selectedNode.childNodes;
var anyChildElements = false;

for (var i = 0; i < children.length; i++)
   if (children[i].nodeType === 1) {
       anyChildElements = true;
       break;
   }

if (anyChildElements) {
    return confirm("heloo");
}