`
jeasony
  • 浏览: 200584 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

简单灵活的权限树

    博客分类:
  • js
阅读更多
dree 作了一些修改:

1、   增加 Node 的属性,目的是将原来的名称链接改成可选择的 checkbox

 

function Node(id, pid, cname, cvalue, cshow, cchecked, cdisabled, url, title, target, icon, iconOpen, open) {

    this.id = id;

    this.pid = pid;

    //chechbox的名称

    this.cname = cname;

    //chechbox的值

    this.cvalue = cvalue;

    //chechbox的显示

    this.cshow = cshow;

    //chechbox是否被选中,默认是不选

    this.cchecked = cchecked||false;

    //chechbox是否可用,默认是可用

    this.cdisabled = cdisabled||false;

    //节点链接,默认是虚链接

    this.url = url||'#';

    this.title = title;

    this.target = target;

    this.icon = icon;

    this.iconOpen = iconOpen;

    this._io = open || false;

    this._is = false;

    this._ls = false;

    this._hc = false;

    this._ai = 0;

    this._p;

};

2、   将原来节点显示改为 checkbox ,根节点不变,考虑了是否已选和是否可用的状态

 

if(node.pid == this.root.id){

        str += node.cname;

    }else{

        /**组装checkbox开始*/

        checkboxSyntax = "<input type='checkbox' desc='" + node.cshow + "' name='" + node.cname + "' id='" + node.cname + "_" + node.id + "' value='" + node.cvalue + "' onClick='javascript: " + this.obj + ".checkNode(" + node.id+","+node.pid+","+node._hc + ",this.checked);' ";

        //是否被选中

        if(node.cchecked)

            checkboxSyntax += " checked ";

        //是否可用

        if(node.cdisabled)

            checkboxSyntax += " disabled ";        

        checkboxSyntax += ">" + node.cshow;

        /**组装checkbox结束*/

               

        str += checkboxSyntax;

    }

3、   增加一些选中的方法

功能是:

l          选中叶节点时递归选中父节点;

l          选中有子孙的节点时子孙节点递归选中;

l          去掉节点选择时如果兄弟节点没有选中的也去掉直接父节点的选中;

 

//===============================

// 作用:选中节点对象

// 参数: nobj node 对象

//      cobj checkbox 对象

//===============================

dTree.prototype.checkNode = function(id,pid,_hc,checked) {

    //1 、递归选父节点对象(无论是叶节点还是中间节点)

    // 判断同级中有无被选中的,如果有选中的就不可以反选

    if(!this.isHaveBNode(id,pid)){

        if(checked){

            // 选中就一直选到根节点

            this.checkPNodeRecursion(pid,checked);

        }else{

            // 去掉选中仅将其父节点去掉选中

            this.checkPNode(pid,checked);

        }

    }  

   

    //2 、如果是中间结点,具有儿子,递归选子节点对象      

    if(_hc)    

        this.checkSNodeRecursion(id,checked);

   

}

 

//===============================

// 作用:判断同级中有无被选中的

// 参数: id 节点 id

//      pid 节点的父节点 id

//===============================

dTree.prototype.isHaveBNode = function(id,pid) {   

    var isChecked = false

    for (var n=0; n<this.aNodes.length; n++) {

        // 不是节点自身、具有同父节点兄弟节点

        if (this.aNodes[n].pid!=-1&&this.aNodes[n].id!=id&&this.aNodes[n].pid == pid) {         

            if(eval("document.all."+ this.aNodes[n].cname + "_" + this.aNodes[n].id + ".checked"))

                isChecked = true;          

        }

    }

   

    return isChecked;

};

 

//===============================

// 作用:递归选中父节点对象

// 参数: pid 节点的父节点 id

//      ischecked 是否被选中

//===============================

dTree.prototype.checkPNodeRecursion = function(pid,ischecked) {

    for (var n=0; n<this.aNodes.length; n++) {

        if (this.aNodes[n].pid!=-1&&this.aNodes[n].id == pid) {        

            eval("document.all."+ this.aNodes[n].cname + "_" + this.aNodes[n].id + ".checked = " + ischecked);

            this.checkPNodeRecursion(this.aNodes[n].pid,ischecked);

            break;

        }

    }

};

 

//===============================

// 作用:递归选中子节点对象

// 参数: id 节点 id

//      ischecked 是否被选中

//===============================

dTree.prototype.checkSNodeRecursion = function(id,ischecked) { 

    for (var n=0; n<this.aNodes.length; n++) {

        if (this.aNodes[n].pid!=-1&&this.aNodes[n].pid == id) {        

            eval("document.all."+ this.aNodes[n].cname + "_" + this.aNodes[n].id + ".checked = " + ischecked);

            this.checkSNodeRecursion(this.aNodes[n].id,ischecked);         

        }

    }

};

 

//===============================

// 作用:仅选中父节点对象

// 参数: pid 节点的父节点 id

//      ischecked 是否被选中

//===============================

dTree.prototype.checkPNode = function(pid,ischecked) { 

    for (var n=0; n<this.aNodes.length; n++) {

        if (this.aNodes[n].pid!=-1&&this.aNodes[n].id == pid) {        

            eval("document.all."+ this.aNodes[n].cname + "_" + this.aNodes[n].id + ".checked = " + ischecked);      

分享到:
评论

相关推荐

    最完美的权限树管理

    "最完美的权限树管理"是C#编程语言实现的一个高效且灵活的权限分配方案,它以树形结构来展示和管理权限,使管理员能够清晰地看到并控制每个用户的权限范围。 首先,我们要理解什么是权限树。权限树是一种将各种权限...

    Tree权限树的分享

    总之,"Tree权限树的分享"是一个深度集成到后台管理系统中的核心功能,它通过Tree树结构来呈现和管理权限,提供了高效、安全且灵活的权限分配方式,对于提升系统的用户体验和管理效率有着显著的作用。

    树形权限选择

    这种方式使得权限管理变得更加简单、直观且高效。 在描述中提到的“在项目中,采用树形权限设置,只需要在复选框中对权限进行勾选就Ok”,这意味着用户或管理员可以通过多级选择来赋予或限制特定角色或用户的权限。...

    权限树tree-multiselect.js-demo

    【权限树】是一种在用户界面中用于表示层次结构数据的组件,常用于权限管理、组织结构展示、文件系统浏览等领域。在IT行业中,权限树通常采用JavaScript实现,它能够直观地展示不同用户或角色的权限分配,使得管理员...

    简单的权限实现

    6. **权限树**:文件名"完整的权限树"可能指的是一个数据结构,用于表示权限之间的层级关系,例如父权限包含子权限。这种结构有助于管理和组织复杂的权限系统,使得权限管理更加灵活和可扩展。 总的来说,实现...

    ztree-权限树-简单数据格式

    《ztree-权限树-简单数据格式》是一个与IT领域密切相关的压缩包文件,主要包含了一个名为"ztree"的程序或组件。该文件的描述多次强调“解压即用”,意味着用户在下载并解压文件后,无需进行复杂的安装过程,可以直接...

    带 checkbox 的 dtree 权限树

    综上所述,"带checkbox的dtree权限树"是实现用户权限管理的一种高效且直观的方法,它结合了数据可视化和交互性,使得权限分配过程变得简单而清晰。在实际开发中,根据项目需求,我们还可以进一步定制功能,提升用户...

    ralasafe问题权限树demo

    **ralasafe问题权限树demo** 是一个基于RalaSafe框架的权限管理示例,它展示了如何使用RalaSafe来构建复杂的问题权限控制结构。RalaSafe是一款强大的、开源的身份认证与授权框架,专为解决企业级应用的安全需求而...

    权限菜单树

    EXT库提供了一个强大的TreePanel组件,使得在JavaScript环境中实现权限菜单树变得简单。通过与服务器端的交互,我们可以动态加载和更新菜单,实现权限控制。理解并掌握这部分知识对于开发高效、安全的Web应用至关...

    java简单开发部门树(Tree)

    在Java开发中,构建部门树(Tree)是一个常见的需求,特别是在企业级应用中,用于展示组织结构或权限管理。这个项目提供了从JSP前端到Java后端的完整解决方案,非常适合初学者理解和学习,也能帮助有经验的开发者...

    简单的权限设置源代码

    通过自定义节点的展开、折叠和选择行为,可以实现对权限树的交互式管理。 DXperience是DevExpress提供的一个全面的.NET开发工具集,它包含了大量的UI控件和开发组件,覆盖了Web、WinForms、WPF等多个平台。在这个...

    zTree文件树and权限树插件,方便简洁,功能强大好用

    zTree是一款基于jQuery的文件树和权限树插件,它以其简洁、高效的特性深受开发者喜爱。在网页应用中,zTree常用于展示层级结构的数据,如文件目录、组织架构或权限管理等。它不仅提供了丰富的配置选项,还支持多种...

    【ASP.NET编程知识】EasyUI Tree+Asp.net实现权限树或目录树导航的简单实例.docx

    在ASP.NET编程中,结合EasyUI Tree控件可以创建出功能强大的权限树或目录树导航。这个简单实例展示了如何在Asp.net应用中利用EasyUI的Tree组件来动态加载数据并实现点击节点时的交互功能。 首先,EasyUI是一个基于...

    EasyUI Tree+Asp.net实现权限树或目录树导航的简单实例

    EasyUI Tree与***结合使用实现权限树或目录树导航的功能,主要适用于构建网站后台管理系统中的导航模块,便于用户对网站的结构与权限进行管理。该实现方式利用了前端框架EasyUI提供的Tree控件和***的后台处理能力。 ...

    网站常用简单的树形结构

    本节我们将深入探讨如何实现一个简单的树形结构,并将其应用于网站后台管理。 首先,我们需要理解树形结构的基本概念。树形结构是一种非线性的数据结构,它由节点(或称为顶点)和边构成,每个节点可以有零个或多...

    一种基于树型结构的BS系统权限控制方法

    基于系统资源树,用户权限的生成变得更为直观和灵活。通过对每一个页面分配唯一的标志符,并将其映射到系统资源树的相应节点,用户权限的生成就转换为了对树中节点的操作权限分配。当系统资源发生动态变化时,如新增...

    delphi 组权限设置

    用户组权限设置,代码简单,控制权限方便,可扩展性好。 通过系统管理员进入 权限设置,设置权限组及该组的功能。 然后通过用户设置,设置用户并指定用户是哪个组,改用户就赋予该组的权限。 使用actionlist 集中...

    多功能jQuery树插件zTree实现权限列表简单实例

    在了解多功能jQuery树插件zTree实现权限列表的简单实例之前,我们首先需要理解几个基础概念。首先,jQuery是一个快速、小巧且功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互的过程,提高...

    权限管理 EasyUI

    通过这种方式,可以实现灵活的权限控制,限制用户对系统资源的访问。 3. **C# 通用权限源码**: 后端部分使用 C# 编写,可能是基于 ASP.NET MVC 或 WebAPI 框架,负责处理数据操作和业务逻辑。在权限管理中,C# ...

Global site tag (gtag.js) - Google Analytics