treeview

    最近因为做权限功能,所以一直要和treeview打交道,虽然说treeview是个很好用的东东,可是客户端的操作未免太少了,因为自己添加了一个客户端的控件,没有使用他自己自带的checkbox功能,ID上是自己设置的,为了实现父级与子级 的级连,真是的费了好大的劲呀,原来打算写一个递归分析其div层之间的关系,

 //查找其下所有的子层
        function GetChildDiv(div)
        {
           
            var divs = document.getElementsByTagName("div");
            for(var i=0;i<divs.length;i++){
                e2=divs[i];
     
                   GetChildNode(e2.id);
                }

        }
       
        function GetChildNode(div)
        {
             var eles = document.getElementsByTagName("input");
                for(var i = 0; i < eles.length; i++){
                    e1 = eles[i];
                    //alert(e1.id);
                    if(e1.type == "checkbox" && e1.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id==div) {
                      alert(e1.id);
                    }
                }
        }

结果却发现兄弟的关系也被放在了子层之中,痛恨一下,好不容易写了一堆的js,只好放弃,想改用ajax写吧,经理说这样写的话,会影响效率,三思而后想,决定放弃.5555555555,简直恨到了极点.不过还好,又想到了用链表来做,终于一路绿灯前进,写了N个方法之后,级连才算是告一段落, 可能是自己的想法受限,所以感觉还不是很完善.

把我写过后一个链表加父子级的级连copy过来一份,算是给自己的一个纪念吧,

/***************************************************************************************
Name: Javescript  for checkbox in ASP.NET 2.0 TreeView
描述: ASP.NET 2.0 TreeView 主要功能:实现treeview中 父级与子级checkbox的级联状态
    包括:
    * 父级未选中状态,其子级是不可以操作
    * 父级选中,其下子级也选中

Author: 蔡永莲
Date:   2008-02-27
Commonts:
***************************************************************************************/

 


       var nodeRelate;
       var list;
       var first=null;
       var last=null;
       var childChk; //子节点ID;
      
       var arr ;
      
      
       //将所有模块功能关系放入链表中
      
       function LinkList(id,parentID){
            this.id=id;
            this.parentData=parentID;
            this.next=null;
       }
      
       
       function LinkListAdd(returnStr){
           arr = returnStr.split(',');
            for(var i=0;i<arr.length;i++)
           {
          
              nodeRelate=arr[i].split('/');
              if(nodeRelate.length>0){
               
                  list=new LinkList(nodeRelate[0],nodeRelate[1]);
                  //如果是第一个,则第一个值和最后一个值都为当前值
                  if(first==null)  
                  {  
                      first=list;  
                      last=list;  
                  }
                  //不是第一个节点,则在其后追加值 
                  else  
                  {  
                      last.next=list;  
                      last=list;  
                  }  
              }
             
           }
           
       }

        //遍历链表判断checkbox的选择状态,此处只实现了其下一级子节点的级连,
      function   show(parentID,isChecked)  
      {
          var childChk;
          
           for(temp=first;temp!=null;temp=temp.next)  
          {
                         if(temp.parentData==parentID){
                       
                        childChk = document.getElementById(temp.id)
                        //如果父节点的选择状态,选中则子节点选中,未选中,则子节点未选中
                        if(isChecked){
                            childChk.checked=isChecked;
                        }
                        else{
                            childChk.checked=false;
                        }
        
                    }     
                        
             }  
      }

        //父级与当前级及当前级下子级的级联关系
        function isCheck(oChk,pChk)
        {
        
            var cb=document.getElementById(oChk);
            var pCK=document.getElementById(pChk);
            var isChecked;
            
          
            //看当前级的状态,如果是选中,则判断其父级的状态,如果其父级不是选中状态,则弹出提示框
            if(cb.checked){
               
               
                if(pCK.checked){
                    cb.checked="checked";
                   
                }
                else{
                    cb.checked=false;
                    alert("此父级未选中,请先选中父级");
                }
            }
           
            // 是否级联选择
           
            //记录当前级的选择状态
            isChecked = cb.checked;
           
          
           
            show(cb.id,isChecked);
 
        }
       
         //根节点下当前级与子级的级联关系
        function isCheck(oChk)
        {
            var cb=document.getElementById(oChk);
           
            var isChecked;

            //记录当前级的选择状态
            isChecked = cb.checked;
           
            show(cb.id,isChecked);
                 
        }
        
               //是否是checkbox
        function IsCheckBox(element)
        {  
            if(element == null)
                return false;
            return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox");
        }

 

不过还是很幸福的,因为最后实现了功能 ,虽然没有把其下所有的子级点全部选中,但因为时间关系,只好先做完了整个权限再接着完善,等改好了,再把那部分发下来.呵呵.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值