Treeview完美的客户端,节点状态的级联处理,递归查找被选中的所有节点<script event="onCheck" for="TreeViewModel">
 var node=TreeViewModel.getTreeNode(event.treeNodeIndex);
 setcheck(node);function setcheck(node)
{
 var i;
 var ChildNode=new Array();
 ChildNode=node.getChildren();
 
 //首先处理其上级节点的状态
 if (!node.getAttribute("checked")) { //如果没有选中,那么其所有的父节点状态都是未选中
  var ParentNode = node.getParent();
  while (ParentNode != null && ParentNode.getAttribute("checked")) {
   ParentNode.setAttribute("checked", "false");
   ParentNode = ParentNode.getParent();
  }  
 }
 else {         //如果选中,那么检查同级节点,如果都选中,那么自动选中父节点,并且再检查父节点的同级节点
  //node.setAttribute("expanded", "true");
  var ParentNode = node;
  while ((ParentNode=ParentNode.getParent()) != null) {
   var j = 0;
   var BrotherNodes = new Array();
   BrotherNodes = ParentNode.getChildren();
   for (i = 0; i < BrotherNodes.length; i ++) {
    if (BrotherNodes[i].getAttribute("checked") == true) {
     j = j + 1;
    }
    else {
     i = i + 1;
     break;
    }
   }
   if (i == j) {
    ParentNode.setAttribute("checked", "true");
   }
   else {
    break;
   }
  } }
 
 //现在处理子节点,将所有子节点都选中,或者取消选中
 for(i=0;i<ChildNode.length;i++)   
 {
  var cNode;
  cNode=ChildNode[i];
  cNode.setAttribute("checked", node.getAttribute("checked"));
  if(parseInt(cNode.getChildren().length)!=0)
   setcheck(cNode);
 }
}//从Treeview中寻找被选中的所有节点
function FindCheckedFromTree(tree) {
 var i = 0;
 var node;
 document.Form1.Text1.value = '';
 while ((node=tree.getTreeNode(i.toString(10))) != null) {
  if (node.getAttribute("checked"))
   AddChecked(node);
  FindCheckedFromNode(node);
  i = i + 1;
 }
}//从一个节点寻找其中所有被选中节点(递归)
function FindCheckedFromNode(node) {
 var i = 0;
 var nodes = new Array();
 nodes = node.getChildren();
 
 //alert('Now searching ' + ':   ' + node.getAttribute("Text"));
 for (i = 0; i < nodes.length; i++) {
  var cNode;
  cNode=nodes[i];
  if (cNode.getAttribute("checked"))
   AddChecked(cNode);
  
  if (parseInt(cNode.getChildren().length) != 0 ) {
   FindCheckedFromNode(cNode);
  }
 }
}//标记一个节点被选中
function AddChecked(node) {
 //alert(node.getAttribute("Text") + ' is checked');
 document.Form1.Text1.value += node.getAttribute("Text");
}</script>