ztree实现权限横向显示功能


Posted in Javascript onMay 20, 2017

 最近在做权限功能的时候,采用的ztree实现的,但是产品要求最后一层的权限节点要横向显示。开始在网上找的解决方案是用css样式把最后一层的display设置为inline。在我本地电脑上看了下。效果不错。

但是,后来测试在用十年前的笔记本测这个功能的时候,发现特别的卡,导致浏览器都崩溃了。所以,性能优化开始了。

1、同步改为异步,虽然不卡,但是功能不满足,很多人勾选了一个父节点(模块节点),就保存,此时子节点根本没有,所以保存的数据是有问题的。

2、设置showIcon和showLine为false,发现速度有一丢丢的提升,但是产品还是不满意。

3、仔细看了下,ztree的checkbox都是用span模拟的,搞个背景图。凭直觉觉得用原生的checkbox要比用图片模拟要强一些。说干就干,找了ztree提供的一个例子,稍作改造,效果还是很明显的。用到的主要方法时addDiyDom。

下面把主要的代码贴上来。

1、数据结构,要求有一个isLeaf节点,标记是否是子节点。

var zNodes =[
      { id:1, pId:0, name:"父节点 1", open:true,isLeaf:false},
      { id:11, pId:1, name:"叶子节点 1-1",isLeaf:true},
      { id:12, pId:1, name:"叶子节点 1-2",open:true,isLeaf:false},
      { id:120, pId:12, name:"叶子节点 1-2-0",isLeaf:true},
      { id:121, pId:12, name:"叶子节点 1-2-1",isLeaf:true},
      { id:13, pId:1, name:"叶子节点 1-3",isLeaf:true},
      { id:2, pId:0, name:"父节点 2", open:true,isLeaf:false},
      { id:21, pId:2, name:"叶子节点 2-1",isLeaf:true},
      { id:22, pId:2, name:"叶子节点 2-2",isLeaf:true},
      { id:23, pId:2, name:"叶子节点 2-3",isLeaf:true},
      { id:3, pId:0, name:"父节点 3", open:true,isLeaf:false},
      { id:31, pId:3, name:"叶子节点 3-1",isLeaf:true},
      { id:32, pId:3, name:"叶子节点 3-2",isLeaf:true},
      { id:33, pId:3, name:"叶子节点 3-3",isLeaf:true}
    ];

2、addDiyDom方法

function addDiyDom(treeId, treeNode) {
      //console.log(treeNode);
      var aObj = $("#" + treeNode.tId + IDMark_A);
      var editStr = $("<input type='checkbox' class='checkboxBtn' id='checkbox_" +treeNode.id+ "' onclick='checkedHandler(this)' ></input>");
      editStr.data("treeNode",treeNode);
      aObj.before(editStr);
    
    }

3、自己写的几个级联操作的方法

function checkedHandler(checkbox){
      var $checkbox = $(checkbox),
        treeNode = $checkbox.data("treeNode"),
        state = checkbox.checked;
        if(treeNode.isLeaf){ //子节点
          if(state){ //子节点选中,父节点要跟着选中,子节点取消选择,父节点不用级联
            setParentNodeChecked(checkbox);
          }
        }else{ //父节点
          if(state){ //选中,级联子节点,级联父节点
            setParentNodeChecked(checkbox);
            setChildNodeChecked(checkbox);
          }else{
            setChildNodeChecked(checkbox);
          }
        }
    }
    /**设置父节点选中 */
    function setParentNodeChecked(checkbox){
      var $pNode = $(checkbox).closest("ul").parent();
      var pCheckbox = $pNode.find(".checkboxBtn").get(0);
      var treeNode = $(pCheckbox).data("treeNode");
      if(pCheckbox.checked === checkbox.checked) return;
      pCheckbox.checked = checkbox;
      if(treeNode.pId != "0") setParentNodeChecked(pCheckbox);
    }
    /**设置子节点选中 */
    function setChildNodeChecked(checkbox){
      $(checkbox).closest("li").find(".checkboxBtn").each(function(){
        this.checked = checkbox.checked;
      });
    }

4、css中,设置:

.ztree li.isLeaf{
display:inline;
 }

以上所述是小编给大家介绍的ztree实现权限横向显示功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于javascript的JSON格式页面展示美化方法
Jul 02 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
触屏中的JavaScript事件分析
Feb 06 Javascript
JavaScript中使用数组方法汇总
Feb 16 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
Nov 07 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
JS实现简单的星期格式转换功能示例
Jul 23 Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
Nov 05 Javascript
如何在微信小程序中存setStorage
Dec 13 Javascript
vue 项目软键盘回车触发搜索事件
Sep 09 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 #Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 #Javascript
微信小程序利用co处理异步流程的方法教程
May 20 #Javascript
关于jQuery库冲突的完美解决办法
May 20 #jQuery
layui文件上传实现代码
May 20 #Javascript
为你的微信小程序体积瘦身详解
May 20 #Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 #jQuery
You might like
解决中英文字符串长度问题函数
2007/01/16 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
Python实现字符串格式化的方法小结
2017/02/20 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
python实时监控cpu小工具
2018/06/21 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
大学毕业的自我鉴定
2013/10/08 职场文书
结婚典礼证婚词
2014/01/11 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
文案策划求职信
2014/04/14 职场文书
技术比武方案
2014/05/19 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android