TreeView控件实现选中父节点时全选子节点

 第一种方法
<head runat="server">
    <title>无标题页</title>

    <script type="text/javascript">
    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==null || objParentDiv == "undefined")
            {
                return;
            }
            setChildUnChecked(objParentDiv);
        }
}
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" οnclick="CheckEvent()">
            <Nodes>
                <asp:TreeNode Text="A" Value="A">
                    <asp:TreeNode Text="AA" Value="AA"></asp:TreeNode>
                    <asp:TreeNode Text="AAA" Value="AAA"></asp:TreeNode>
                </asp:TreeNode>
                <asp:TreeNode Text="B" Value="B">
                    <asp:TreeNode Text="BB" Value="BB"></asp:TreeNode>
                    <asp:TreeNode Text="BBB" Value="BBB"></asp:TreeNode>
                </asp:TreeNode>
            </Nodes>
        </asp:TreeView>
    </div>
    </form>
</body>
-----------------------------------------------------
第二种方法:
<script type="text/javascript">
    function client_OnTreeNodeChecked()
{
    var obj = window.event.srcElement;
    var treeNodeFound = false;
    var checkedState;
    if (obj.tagName == "INPUT" && obj.type == "checkbox")
    {
        var treeNode = obj;
        checkedState = treeNode.checked;
        do
        {
            obj = obj.parentElement;
        } while (obj.tagName != "TABLE")
        var parentTreeLevel = obj.rows[0].cells.length;
        var parentTreeNode = obj.rows[0].cells[0];
        var tables = obj.parentElement.getElementsByTagName("TABLE");
        var numTables = tables.length
        if (numTables >= 1)
        {
            for (i=0; i < numTables; i++)
            {
                if (tables[i] == obj)
                {
                    treeNodeFound = true;
                     i++;
                     if (i == numTables)
                    {
                        return;
                    }
            }
            if (treeNodeFound == true)
            {
                var childTreeLevel = tables[i].rows[0].cells.length;
                if (childTreeLevel > parentTreeLevel)
                {
                    var cell = tables[i].rows[0].cells[childTreeLevel - 1];
                    var inputs = cell.getElementsByTagName("INPUT");
                    inputs[0].checked = checkedState;
                }
                else
                {
                    return;
                }
            }
        }
    }
    }
}
    </script>
<asp:TreeView ID="TreeView1" runat="server" οnclick="client_OnTreeNodeChecked()"
            ShowCheckBoxes="All">
            <Nodes>
                <asp:TreeNode Text="A" Value="A">
                    <asp:TreeNode Text="AA" Value="AA"></asp:TreeNode>
                    <asp:TreeNode Text="AAA" Value="AAA"></asp:TreeNode>
                </asp:TreeNode>
                <asp:TreeNode Text="B" Value="B">
                    <asp:TreeNode Text="BB" Value="BB"></asp:TreeNode>
                    <asp:TreeNode Text="BBB" Value="BBB"></asp:TreeNode>
                </asp:TreeNode>
            </Nodes>
        </asp:TreeView>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值