重修理解了一下js 控制treeview 菜单的子级和父级的关系 理解的还不够全 因为 html不够全 但是加个注释吧

 function OnTreeNodeChecked() {
            var ele = event.srcElement;//获得事件的所有属性
            if (ele.type == 'checkbox') //判断事件的type是否是checkbox
            {
                var childrenDivID = ele.id.replace('CheckBox', 'Nodes');//事件的id中checkbox用nodes代替
                var div = document.getElementById(childrenDivID);
                if (div != null) //判断是否有子集
                {
                    var checkBoxs = div.getElementsByTagName('INPUT');//获得所有的子集
                    for (var i = 0; i < checkBoxs.length; i++) 
                    {
                        if (checkBoxs[i].type == 'checkbox')//判断其type是否为checkbox 
                        {
                            checkBoxs[i].checked = ele.checked;//将子集的checkbox状态设定为何父级的checkbox的状态一致
                        }
                    }
                }
                OnTreeNodeChildChecked(ele);

            }
        }
        function OnTreeNodeChildChecked(ele) {
            //自动处理上级 
            try {
                var parentDiv = ele.parentElement.parentElement.parentElement.parentElement.parentElement;//获得其id

                var parentChkBox = document.getElementById(parentDiv.id.replace('Nodes', 'CheckBox'));
                if (parentChkBox != null) //和上面那句判断是否有父级
                {
                    var ChildsChkAll = true;//设置一个变量 为true
                    var Boxs = parentDiv.getElementsByTagName('INPUT');
                    var m = 0;
                    var n = 0;
                    for (var i = 0; i < Boxs.length; i++) {

                        if (Boxs[i].type == 'checkbox') {
                            m++;
                        }
                        if (Boxs[i].type == 'checkbox' && Boxs[i].checked == false) {
                            n++
                        }
                    }
                    if (m == n)//判断同级中是否都未选中 
                    {

                        ChildsChkAll = false;
                    }
                    parentChkBox.checked = ChildsChkAll; //父级的选中状态为ChildsChkAll
                    OnTreeNodeChildChecked(parentChkBox);
                }
            }
            catch (e) {


            }
        } 
原文地址:https://www.cnblogs.com/haihang/p/2796452.html