(javascript,treeview)treeview通过checkbox来进行全选单选

from:http://blog.csdn.net/netjxz/archive/2007/07/18/1696552.aspx
Treeview如何支持全选和单选,以及获取相关的节点id值,经过自己的修改改为针对3级目录,其中提供选择的是2和3级目录,我的代码如下(其中还需要一个selectID的hidden input控件)
  1 
  2             //根据已选择的节点的字符串初始化选择的节点
  3             function findAndCheckedNodes(NodeArray,nodeDatas)
  4             {
  5                  if(parseInt(NodeArray.length)==0)
  6                  {
  7                     return;
  8                 }
  9                 else
 10                 {
 11                     for(var i=0;i<parseInt(NodeArray.length);i++)
 12                     {
 13                         var cNode,nodeData;
 14                         cNode=NodeArray[i];
 15                         ////如果该节点在nodeDatas里则初始化checked = true;
 16                         nodeData = cNode.getAttribute("NodeData");
 17                         for(var j=0;j<nodeDatas.length;j++)
 18                         {
 19                             if(nodeDatas[j] == nodeData)
 20                             {
 21                                 cNode.setAttribute("checked","true");
 22                                 break;
 23                             }
 24                         }
 25                         //如果有子节点,则继续递归
 26                         if(parseInt(cNode.getChildren().length)!=0)
 27                         findAndCheckedNodes(cNode.getChildren(),nodeDatas);    
 28                     }
 29                 }
 30             }
 31             
 32             //节点的oncheck事件
 33             function tree_oncheck(tree)
 34             {
 35                 var node=tree.getTreeNode(tree.clickedNodeIndex);
 36                 var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
 37                 setcheck(node,Pchecked);
 38                 setParent(node,Pchecked);//如果是选择那么选择其父接点.
 39                 document.getElementById('selectID').value ='';
 40                 FindCheckedFromNode(TvwCategorys);
 41             }
 42             //设置子节点选中
 43             function setcheck(node,Pc)
 44             {
 45                 var i;
 46                 var ChildNode=new Array();
 47                 ChildNode=node.getChildren();
 48                  
 49                 if(parseInt(ChildNode.length)==0)
 50                     return;
 51                 else
 52                 {
 53                     for(i=0;i<ChildNode.length;i++)
 54                     {
 55                         var cNode;
 56                         cNode=ChildNode[i];
 57                         if(parseInt(cNode.getChildren().length)!=0)
 58                             setcheck(cNode,Pc);
 59                         cNode.setAttribute("checked",Pc);
 60                     }
 61                 }
 62             }
 63             //获取所有节点状态
 64             function FindCheckedFromNode(node) 
 65             {
 66                 var i = 0;
 67                 var nodes = new Array();
 68                 nodes = node.getChildren();
 69                  
 70                 for (i = 0; i < nodes.length; i++
 71                 {
 72                     var cNode;
 73                     cNode=nodes[i];
 74                     if (cNode.getAttribute("checked"))
 75                         AddChecked(cNode);
 76                     else
 77                         AddUnChecked(cNode);
 78                       
 79                     if (parseInt(cNode.getChildren().length) != 0 ) 
 80                     {
 81                         FindCheckedFromNode(cNode);
 82                     }
 83                 }
 84             }
 85             //添加选中节点
 86             function AddChecked(node) 
 87             {
 88                 var selectID = document.getElementById("selectID").value;
 89                 if(node.getAttribute("Type"=="sub" && selectID.indexOf(node.getAttribute("NodeData"))<0)
 90                 document.getElementById("selectID").value += node.getAttribute("NodeData")+",";
 91             }
 92             //添加未选中节点
 93             function AddUnChecked(node)
 94             {          
 95                 var selectID = document.getElementById("selectID").value;
 96                 if(node.getAttribute("Type"=="sub" && selectID.indexOf(node.getAttribute("NodeData"))>=0)
 97                     selectedID.replace(","+curID+",",",");
 98                 document.getElementById("selectID").value = selectID;
 99             }
100             
101             //设置子节点选中/取消;
102 //同时需要设置父节点的状态(如果是取消选中的话,仅仅设置本节点及其所有字接点,不涉及父接点)
103             function setParent(node,Pc)
104             {
105                 var parentNode = node.getParent();
106                 if(parentNode)
107                 {    
108                     var parentNodeFather = parentNode.getParent();
109                     if(parentNodeFather)
110                     {
111                         setParent(parentNode,Pc);
112                     }
113                     if(Pc)
114                     {parentNode.setAttribute("checked",Pc);}
115                     else
116                     {
117                         checkBrother(parentNode,Pc,node.getAttribute("NodeData"))
118                     }
119                 }
120             }
121             
122 //检查子接点是否有选择的,如果有一个选择了,那返回true
123 //只查第一级节点.
124 function checkBrother(parentNode,Pc,nodeData)
125 {
126     var childNodes = new Array();
127     childNodes = parentNode.getChildren();
128     if(childNodes.length >0)
129     {
130         var bChecked = true;
131         for(var i=0;i<childNodes.length;i++)
132         {
133             if(childNodes[i].getAttribute("checked"== true &&  childNodes[i].getAttribute("NodeData"!= nodeData)
134             {
135                 //alert(i+childNodes[i].getAttribute("Text"));
136                 bChecked = false;
137                 break;
138             }
139         }
140         if(bChecked)
141         {
142             parentNode.setAttribute("checked",Pc);
143         }
144         else
145         {
146             //所有父结点选择
147             setParent(parentNode,!Pc)
148         }
149     }
150     else
151     {
152         parentNode.setAttribute("checked",Pc);
153     }
154 }
155    
原文地址:https://www.cnblogs.com/ocean2000/p/888509.html