原文如下:


这里使用asp.net2.0的TreeView控件结合JavaScript实现权限树的部分功能。

  假设权限树中有如下三条规则:

  1、该节点可以访问,则他的父节点也必能访问;

  2、该节点可以访问,则他的子节点也都能访问;

  3、该节点不可访问,则他的子节点也不能访问。


代码如下:

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点//获取元素指定tagName的父元素

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_02function public_GetParentByTagName(element, tagName) 

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_03[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_04[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_05{

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_06    var parent = element.parentNode;

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_07    var upperTagName = tagName.toUpperCase();

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_08    //如果这个元素还不是想要的tag就继续上溯

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_09    while (parent && (parent.tagName.toUpperCase() != upperTagName)) 

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_10[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_11    [转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_12{

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_13        parent = parent.parentNode ? parent.parentNode : parent.parentElement;

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_14    }

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_15    return parent;

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_16}

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_17

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_18//设置节点的父节点Cheched——该节点可访问,则他的父节点也必能访问

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_19function setParentChecked(objNode)

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_20[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_21[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_22

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_23    var objParentDiv = public_GetParentByTagName(objNode,"div");

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_24    if(objParentDiv==null || objParentDiv == "undefined")

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_25[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_26    [转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_27{

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_28        return;

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_29    }

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_30    var objID = objParentDiv.getAttribute("ID");

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_31    objID = objID.substring(0,objID.indexOf("Nodes"));

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_32    objID = objID+"CheckBox";

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_33    var objParentCheckBox = document.getElementById(objID);

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_34    if(objParentCheckBox==null || objParentCheckBox == "undefined")

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_35[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_36    [转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_37{

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_38        return;

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_39    } 

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_40    if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_41    return; 

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_42    objParentCheckBox.checked = true;

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_43    setParentChecked(objParentCheckBox);

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_44}

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_45

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_46//设置节点的子节点uncheched——该节点不可访问,则他的子节点也不能访问

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_47function setChildUnChecked(divID)

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_48[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_49[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_50

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_51    var objchild = divID.children;

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_52    var count = objchild.length; 

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_53    for(var i=0;i<objchild.length;i++)

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_54[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_55    [转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_56{

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_57        var tempObj = objchild[i];

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_58        if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_59[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_60        [转]权限树中Checkbox的操作[Asp.Net2.0]_i++_61{

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_62            tempObj.checked = false;

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_63        }

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_64        setChildUnChecked(tempObj); 

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_65    }

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_66}

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_67

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_68//设置节点的子节点cheched——该节点可以访问,则他的子节点也都能访问

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_69function setChildChecked(divID)

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_70[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_71[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_72

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_73    var objchild = divID.children;

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_74    var count = objchild.length; 

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_75    for(var i=0;i<objchild.length;i++)

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_76[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_77    [转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_78{

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_79        var tempObj = objchild[i];

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_80        if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_81[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_82        [转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_83{

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_84            tempObj.checked = true;

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_85        }

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_86        setChildChecked(tempObj); 

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_87    }

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_88}

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_89

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_90//触发事件

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_91function CheckEvent()

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_92[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_93[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_94{

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_95

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_96    var objNode = event.srcElement; 

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_97

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_98    if(objNode.tagName!="INPUT" || objNode.type!="checkbox")

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_99    return;

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_100

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_101    if(objNode.checked==true)

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_102[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_103    [转]权限树中Checkbox的操作[Asp.Net2.0]_i++_104{

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_105        setParentChecked(objNode);

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_106        var objID = objNode.getAttribute("ID");

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_107        var objID = objID.substring(0,objID.indexOf("CheckBox")); 

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_108        var objParentDiv = document.getElementById(objID+"Nodes");

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_109        if(objParentDiv==null || objParentDiv == "undefined")

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_110[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_111        [转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_112{

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_113            return;

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_114        } 

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_115        setChildChecked(objParentDiv);

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_116    }

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_117    else

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_118[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_119    [转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_120{

[转]权限树中Checkbox的操作[Asp.Net2.0]_子节点_121        var objID = objNode.getAttribute("ID");

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_122        var objID = objID.substring(0,objID.indexOf("CheckBox")); 

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_123        var objParentDiv = document.getElementById(objID+"Nodes");

[转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_124        if(objParentDiv==null || objParentDiv == "undefined")

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_125[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_126        [转]权限树中Checkbox的操作[Asp.Net2.0]_asp.net_127{

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_128            return;

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_129        } 

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_130        setChildUnChecked(objParentDiv);

[转]权限树中Checkbox的操作[Asp.Net2.0]_i++_131    }

[转]权限树中Checkbox的操作[Asp.Net2.0]_javascript_132}

[转]权限树中Checkbox的操作[Asp.Net2.0]_父节点_133


然后在page_load事件中将TreeView与js事件绑定上:

this.TreeView1.Attributes.Add("onclick", "CheckEvent()");