treeview的2个问题,请教大家。
1,点击父节点的checkbox则下级也被选中,反之:取消父节点选中则下级全部取消。并且可以从服务器端获得所选中节点的值。   
 2,一个跟节点展开时,其他节点自动闭合。   
 treeview是无限级的。   
 有没有这方面的相关文章呢???
------解决方案--------------------google下嘛
------解决方案--------------------JF UP
------解决方案--------------------找一个JS文件,比如这个: 
 //获取元素指定tagName的父元素 
 function public_GetParentByTagName(element, tagName)  
 { 
     var parent = element.parentNode; 
     var upperTagName = tagName.toUpperCase(); 
     //如果这个元素还不是想要的tag就继续上溯 
     while (parent && (parent.tagName.toUpperCase() != upperTagName))  
     { 
         parent = parent.parentNode ? parent.parentNode : parent.parentElement; 
     } 
     return parent; 
 }   
 //设置节点的父节点Cheched——该节点可访问,则他的父节点也必能访问 
 function setParentChecked(objNode) 
 {  
     var objParentDiv = public_GetParentByTagName(objNode, "div "); 
     if(objParentDiv==null || objParentDiv ==  "undefined ") 
     { 
         return; 
     } 
     var objID = objParentDiv.getAttribute( "ID "); 
     objID = objID.substring(0,objID.indexOf( "Nodes ")); 
     objID = objID+ "CheckBox "; 
     var objParentCheckBox = document.getElementById(objID); 
     if(objParentCheckBox==null || objParentCheckBox ==  "undefined ") 
     { 
         return; 
     }  
     if(objParentCheckBox.tagName!= "INPUT " && objParentCheckBox.type ==  "checkbox ") 
     return;  
     objParentCheckBox.checked = true; 
     setParentChecked(objParentCheckBox); 
 }   
 //设置节点的子节点uncheched——该节点不可访问,则他的子节点也不能访问 
 function setChildUnChecked(divID) 
 {  
     var objchild = divID.children; 
     var count = objchild.length;  
     for(var i=0;i <objchild.length;i++) 
     { 
         var tempObj = objchild[i]; 
         if(tempObj.tagName== "INPUT " && tempObj.type ==  "checkbox ") 
         { 
             tempObj.checked = false; 
         } 
         setChildUnChecked(tempObj);  
     } 
 }   
 //设置节点的子节点cheched——该节点可以访问,则他的子节点也都能访问 
 function setChildChecked(divID) 
 {  
     var objchild = divID.children; 
     var count = objchild.length;  
     for(var i=0;i <objchild.length;i++) 
     { 
         var tempObj = objchild[i]; 
         if(tempObj.tagName== "INPUT " && tempObj.type ==  "checkbox ") 
         { 
             tempObj.checked = true; 
         } 
         setChildChecked(tempObj);  
     } 
 }   
 //触发事件 
 function CheckEvent() 
 {   
     var objNode = event.srcElement;    
     if(objNode.tagName!= "INPUT " || objNode.type!= "checkbox ") 
     return;   
     if(objNode.checked==true) 
     { 
         setParentChecked(objNode); 
         var objID = objNode.getAttribute( "ID "); 
         var objID = objID.substring(0,objID.indexOf( "CheckBox "));  
         var objParentDiv = document.getElementById(objID+ "Nodes "); 
         if(objParentDiv==null || objParentDiv ==  "undefined ") 
         { 
             return; 
         }  
         setChildChecked(objParentDiv); 
     } 
     else 
     { 
         var objID = objNode.getAttribute( "ID "); 
         var objID = objID.substring(0,objID.indexOf( "CheckBox "));  
         var objParentDiv = document.getElementById(objID+ "Nodes "); 
         if(objParentDiv==n