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 相关文章推荐
在JS中解析HTML字符串示例代码
Apr 16 Javascript
js实现的类似于asp数据字典的数据类型代码实例
Sep 03 Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 Javascript
js模糊查询实例分享
Dec 26 Javascript
Vue中使用Sortable的示例代码
Apr 07 Javascript
深入浅析JS中的严格模式
Jun 04 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
Aug 31 Javascript
详解滑动穿透(锁body)终极探索
Apr 16 Javascript
在Vue环境下利用worker运行interval计时器的步骤
Aug 01 Javascript
详解vue中多个有顺序要求的异步操作处理
Oct 29 Javascript
使用webpack搭建pixi.js开发环境
Feb 12 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
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
JavaScript的document对象和window对象详解
2010/12/30 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
南京某公司笔试题
2013/01/27 面试题
工厂门卫岗位职责
2013/11/25 职场文书
大学校庆策划书
2014/01/31 职场文书
2014全国两会心得体会
2014/03/17 职场文书
雷人标语集锦
2014/06/19 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
2014年学校工作总结
2014/11/20 职场文书
销售2014年度工作总结
2014/12/08 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
用python自动生成日历
2021/04/24 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏