请教各位高手,如果我的treeview有几千个节点,用JS的话,有什么好的办法可以快速定位选的有哪些节点?

解决方案 »

  1.   

        protected void DisplayRoleRightInfo(int roleId)
        {
            IList<RoleRight> currentRoleParentNodes = RoleRightManager.GetParentNodesByRoleId(roleId);        ArrayList arrRoleParentNodes = new ArrayList();
            foreach (RoleRight roleRight in currentRoleParentNodes)
            {
                arrRoleParentNodes.Add(roleRight.SysFun.NodeId.ToString());
            }
            //得到所有父级节点信息
            IList<SysFun> sysFuns = SysFunManager.GetAllParentNodeInfo();
            //根据父节点得到对应子节点,把父子节点生成用户控件,然后循环插入到PlaceHolder容器中
            foreach (SysFun sysFun in sysFuns)
            {
                //得到父节点Id
                string nodeId = sysFun.NodeId.ToString();
                //得到父节点名称
                string displayName = sysFun.DisplayName;
                //实例化用户控件
                RoleUserControl roleCotrol = (RoleUserControl)LoadControl(@"RoleUserControl.ascx");
                //实例化隐藏域,用以存储父节点Id
                HtmlInputHidden hidParentMenu = (HtmlInputHidden)roleCotrol.FindControl("hidParentMenu");
                hidParentMenu.Value = nodeId;
                //实例化隐藏域,用以存储角色Id
                HtmlInputHidden hidRoleId = (HtmlInputHidden)roleCotrol.FindControl("hidRoleId");
                hidRoleId.Value = roleId.ToString();
                
                //实例化用户控件中的CheckBox
                CheckBox chkParentMenu = (CheckBox)roleCotrol.FindControl("chkParentMenu");            //显示父菜单名称
                chkParentMenu.Text = displayName;            if (arrRoleParentNodes.Contains(nodeId))
                {
                    chkParentMenu.Checked = true;
                }            //把父子节点生成的用户控件追加到PlaceHolder容器中
                phRoleDistribute.Controls.Add(roleCotrol);
            }
        }
        protected void btnSave_ServerClick(object sender, EventArgs e)
        {
             int roleId = int.Parse(Request["roleid"].ToString());//获得指定的角色id
             IList<RoleRight> currentRoleRights = RoleRightManager.GetAllNodesByRoleId(roleId);
             ArrayList arrRoleNodes = new ArrayList();
             foreach (RoleRight roleRight in currentRoleRights)
             {
                 arrRoleNodes.Add(roleRight.SysFun.NodeId.ToString());
             }         foreach (Control ct in phRoleDistribute.Controls)
             {
                 CheckBox chk = (CheckBox)ct.FindControl("chkParentMenu");
                 HtmlInputHidden hih = (HtmlInputHidden)ct.FindControl("hidParentMenu");             if (chk.Checked)
                 {
                     if (!arrRoleNodes.Contains(hih.Value))
                     {
                         RoleRightManager.InsertRoleRight(roleId.ToString(), hih.Value);
                     }
                 }
                 else
                 {
                     if (arrRoleNodes.Contains(hih.Value))
                     {
                         RoleRightManager.DeleteRoleRight(roleId.ToString(), hih.Value);
                     }
                 }             CheckBoxList chklst = (CheckBoxList)ct.FindControl("chklstChildMenu");
                 foreach (ListItem li in chklst.Items)
                 {
                     if (li.Selected)
                     {
                         if (!arrRoleNodes.Contains(li.Value))
                         {
                             RoleRightManager.InsertRoleRight(roleId.ToString(), li.Value);
                         }
                     }
                     else
                     {
                         if (arrRoleNodes.Contains(li.Value))
                         {
                             RoleRightManager.DeleteRoleRight(roleId.ToString(), li.Value);
                         }
                     }
                 }
             }
             Response.Write("<script>alert('权限已生效!!');self.document.location.href='RoleManage.aspx'</script>");
        }
    我这有个例子看看有帮助吗?
      

  2.   

    在选择事件里面,比如click之类的,然后获取事件对象如event.target之类的,看是不是treeview节点,是的话,再判断选中状态
      

  3.   

    <script language="javascript" type="text/javascript">
    function CheckAll(paramId) 
    {
    var items = document.getElementsByTagName("input"); 
        for(i=0; i<items.length;i++)
        {
            var e = items[i];
    var eId = e.id;//获得当前控件元素的Id
    var m = eId.indexOf('_chk');
    var n = paramId.indexOf('_chk');
    //判断控件类型是否是checkbox,父子节点Id是否匹配,以控制只选中该父节点对应的子节点
    if(eId.substring(0,m)==paramId.substring(0,n) &&e.type=='checkbox')
    {
    e.checked = document.getElementById(paramId).checked;
    }
         }
    }function CheckOnly(paramId)
    {
        var items = document.getElementsByTagName("input"); 
    for(i=0; i<items.length;i++)
    {
            var e = items[i];
    var eId = e.id;
    var m = eId.indexOf('_chk');
    var n = paramId.indexOf('_chk');
    //判断控件类型是否是checkbox,父子节点Id是否匹配,以控制只选中该子节点对应的父节点
    if(eId.substring(0,m) == paramId.substring(0,n) && e.type=='checkbox')
    {
                if(eId.indexOf('chkParentMenu')!=-1){document.getElementById(eId).checked =true;}
    }
    }
    }
    </script>