这里使用asp.net2.0的treeview控件结合javascript实现权限树的部分功能。
假设权限树中有如下三条规则:
1、该节点可以访问,则他的父节点也必能访问;
2、该节点可以访问,则他的子节点也都能访问;
3、该节点不可访问,则他的子节点也不能访问。
代码如下:
//获取元素指定tagname的父元素
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")
{
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器