我要用JS实现,对树的一些操作!
就是当你点击(check=true)某个节点的时候,获取该节点,判断该节点的同级别的节点是否也被check=true,如果是那么报错!
同样,你点击(check=true)某个节点的时候,获取该节点,同时获取该节点的父节点,同时判断跟该节点的父节点同级别的节点是否也被check=true(或跟该节点的父节点同级别的节点下的子节点是否存在check=true的节点,如果存在,那么报错!)如果是那么报错!
谢谢!~
环境: VB .NET 

解决方案 »

  1.   

    网上很多这例子!!
    www.csdn.net和cnblogs有很多的!!
    不妨搜搜!!
      

  2.   

    我也看到了一些!
    但是都不满足要求,能不能看看,下面的js有啥问题:(var currNodeChilds = currNode.childNodes;有点问题,但我不知道如何改!)
    function tree_oncheck(TreeView1)
    {
        //得到当前所 Click 的对象
        var objNode;
        if(!public_IsObjectNull(event.srcElement))
        {
            //IE
            objNode = event.srcElement;
        }
        else
        {
            //FF
            objNode = event.target;
        }    //判断是否 Click 的 CheckBox
        if(!public_IsCheckBox(objNode))
            return;    var objCheckBox = objNode;
        //根据CheckBox状态进行相应处理
        if(objCheckBox.checked==true)
        {
            //递归选中父节点的 CheckBox
            setParentChecked(objCheckBox);
        }
    }//判断对象是否为空
    function public_IsObjectNull(element)
    {
        if(element==null || element == "undefined")
            return true;
        else
            return false;
    }//判断对象是否为 CheckBox
    function public_IsCheckBox(element)
    {
        if(public_IsObjectNull(element))
            return false;
            
        if(element.tagName!="INPUT" || element.type!="checkbox")
            return false;
        else
            return true;
    }
    //得到父节点的 CheckBox
    function public_Node2CheckBox(element)
    {
        var objID = element.getAttribute("ID");
        objID = objID.substring(0,objID.indexOf("Nodes")); 
        return document.getElementById(objID+"CheckBox");
    }
    //得到本节点所在的 Node(Div 对象)
    function public_GetParentNode(element) 
    {
        var parent = element.parentNode;
        var upperTagName = "DIV";
        //如果这个元素还不是想要的 tag 就继续上溯
        while (parent && (parent.tagName.toUpperCase() != upperTagName)) 
        {
            parent = parent.parentNode ? parent.parentNode : parent.parentElement;
        }
        return parent;
    }
    //设置节点的父节点 Checked
    function setParentChecked(currCheckBox)

        var objParentNode= public_GetParentNode(currCheckBox);
        var Last = objParentNode;
        if(public_IsObjectNull(objParentNode))
            return;    
        
        var objParentCheckBox = public_Node2CheckBox(objParentNode);    if(!public_IsCheckBox(objParentCheckBox))
        {
            var bFlag = IsMyChildCheckBoxsUnChecked(Last);
            if(bFlag == false)
                alert("1111");
            return; 
        }
            
        //objParentCheckBox.checked = true;
        setParentChecked(objParentCheckBox);
    }        //判断该节点的子节点是否都为 UnChecked
            function IsMyChildCheckBoxsUnChecked(currObj)
            {
                var retVal = false;
                var bFlag = false;
                var bNextFlag = false;
                var iCount = 0;
                
                var currNode;
                
                currNode = currObj;
                  
                var currNodeChilds = currNode.childNodes;
                var count = currNodeChilds.length; 
                alert("count" + count);
                for(var i=0;i<count;i++)
                {
                    var childCheckBox = currNodeChilds[i];
                    alert(childCheckBox.value);
                    alert("childCheckBox" + childCheckBox.checked);
                    alert("public_IsCheckBox" + public_IsCheckBox(childCheckBox));
                    if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true)
                    {
                       if(retVal == false)
                       {
                           retVal = true;
                           iCount = i;
                           continue;
                       }
                       else
                       {
                            return false;
                       }
                    }
                    else
                    {
                        bFlag = IsKaisyaChecke(childCheckBox); 
                        alert("bFlag" + bFlag);
                        if(iCount != i && bFlag == true)
                        {
                            return false;
                        }
                        
                        if(bFlag == true && bNextFlag == true)
                        {
                            return false;
                        }
                        
                        if(bNextFlag == false && bFlag == true)
                        {
                            bNextFlag = bFlag;
                            iCount = i;
                        } 
                    }       
                }
                
                return true;
            }
            
             //判断该节点的子节点是否都为 UnChecked
            function IsKaisyaChecke(currObj)
            {
                var retVal = false;
                
                var currNode;
                
                currNode = currObj;
                  
                var currNodeChilds = currNode.childNodes;
                var count = currNodeChilds.length; 
                for(var i=0;i<count;i++)
                {
                    var childCheckBox = currNodeChilds[i];
                    
                    if(retVal == false)
                    {
                        if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true)
                        {
                           retVal = true;
                           return retVal;
                        }
                        else 
                            retVal = IsMyChildCheckBoxsUnChecked(childCheckBox);   
                    }      
                }
                return retVal;
            }