javascript 操作treeview的checkbox加载、全选、全不选、以及光标回焦问题

来源:互联网 发布:java子类继承父类 编辑:程序博客网 时间:2024/06/05 07:21

 

 

//在页面加载中:onLoad="Loadtreeview()";
//服务器端加载时注册treeview的check的事件: TreeView1.Attributes.Add("oncheck","tree_oncheck(TreeView1)");


<script language="javascript">
   function Loadtreeview() 
//加载树形
   {
    var AllRootNode
=new Array();
    AllRootNode
=document.getElementById("TreeView1").getChildren();//获得treview的最外层节点数组
    CheckboxLoad(AllRootNode);  //加载checkbox的控件
    var selectedNodes = GetnodeID(AllRootNode);//获得被checked的nodes的ID连加字符串
    
// window.alert(selectedNodes);
    var arrayNodes = new Array();
    arrayNodes 
= selectedNodes.split(",");
    
//window.alert(gg);
    findAndCheckedNodes(AllRootNode,arrayNodes);//加载时判断checkbox的是否有被checked,有的话把它

设置成勾住状态
   }


   function tree_oncheck(TreeView1)
//treeview的check的事件
   {        
    var AllRootNode
=new Array();
    AllRootNode
=document.getElementById("TreeView1").getChildren();  
    var node
=TreeView1.getTreeNode(TreeView1.clickedNodeIndex); //获得刚刚被check的节点
    var child="";
    child
=node.getAttribute("id");//获得刚刚被check的节点的ID
    Select(AllRootNode,child);  //实现光标回焦方法
    var Pchecked=TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("checked");
    setcheck(node,Pchecked); 
//实现checked节点的下面判断是否有子节点有的话,全部实现把子节点给勾

上或全部不勾
          
/*之后的其他操作自己添写,比如check触发的方法、事件啊等等*/             
   }

     
   function Select(NodeArray,nodeid)   
//光标回焦方法
   {

     
if(parseInt(NodeArray.length)==0)
               
return;
     
else
     
{
      
for(var i=0;i< parseInt(NodeArray.length);i++)
      
{
                   
       var cNode;
       cNode
=NodeArray[i];
        
if (cNode.getAttribute("id")==nodeid)
        
{
        TreeView1.selectedNodeIndex 
= cNode.getNodeIndex();
        
break;
        }


       
//如果有子节点,则继续递归
       if(parseInt(cNode.getChildren().length)!=0)
       Select(cNode.getChildren(),nodeid);   
      }

                   
     }


   }


  
            function setcheck(node,Pc) 
//设置子节点选中
            {
                
                var ChildNode
=new Array();
                ChildNode
=node.getChildren();
                 
                
if(parseInt(ChildNode.length)==0)
                    
return;
                
else
                
{
                    
for(var i=0;i<ChildNode.length;i++)
                    
{
                        var cNode;
                        cNode
=ChildNode[i];
                        
if(parseInt(cNode.getChildren().length)!=0)
                            setcheck(cNode,Pc);
                        cNode.setAttribute(
"checked",Pc);
                    }

                }

            }

   
   function GetnodeID(NodeArray) 
//找到被选中节点的所有ID的字符串累加
   {

            var str 
= "";
           
if(parseInt(NodeArray.length)==0)
                 
return;
   
else
   
{
    var cNode;
    
for(var i=0;i<parseInt(NodeArray.length);i++)
    
{
     cNode
=NodeArray[i];
     
if (cNode.getAttribute("Checked")==true)
     

      str 
= str + cNode.getAttribute("id")+",";
     }

     
//如果有子节点,则继续递归
     if(parseInt(cNode.getChildren().length)!=0)
     GetnodeID(cNode.getChildren()); 
    }

                 
   }


        
return  str;
    }

 function CheckboxLoad(NodeArray)  
//checkbox的初始化
 {
       
if(parseInt(NodeArray.length)==0)
             
return;
        
else
        
{
            
for(var i=0;i<parseInt(NodeArray.length);i++)
            
{
                    
                var cNode;
                cNode
=NodeArray[i];
                
                cNode.setAttribute(
"checkbox","true");
        
                
//如果有子节点,则继续递归
                if(parseInt(cNode.getChildren().length)!=0)
                CheckboxLoad(cNode.getChildren()); 
            }

                
        }

 }

 
   function findAndCheckedNodes(NodeArray,nodeDatas)  
//找到已经被checked的节点
     {
      
if(parseInt(NodeArray.length)==0)
      
{
       
return;
      }

      
else
      
{
       
for(var i=0;i<parseInt(NodeArray.length);i++)
       
{
        var cNode,nodeData;
        cNode
=NodeArray[i];
        
////如果该节点在nodeDatas里则初始化checked = true;
        nodeData = cNode.getAttribute("id");
        
for(var j=0;j<parseInt(nodeDatas.length);j++)
        
{
         
if(nodeDatas[j] == nodeData)
         
{
          cNode.setAttribute(
"checked","true");
          
break;
         }

        }

        
//如果有子节点,则继续递归
        if(parseInt(cNode.getChildren().length)!=0)
        findAndCheckedNodes(cNode.getChildren(),nodeDatas);    
       }

      }

     }

    
</script>
原创粉丝点击