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 相关文章推荐
JSON 学习之JSON in JavaScript详细使用说明
Feb 23 Javascript
jquery中animate动画积累的解决方法
Oct 05 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 Javascript
js获取页面及个元素高度、宽度的代码
Apr 26 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 Javascript
Vue 技巧之控制父类的 slot
Feb 24 Javascript
jQuery实现简单飞机大战
Jul 05 jQuery
jquery实现拖拽添加元素功能
Dec 01 jQuery
神级程序员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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
一个oracle+PHP的查询的例子
2006/10/09 PHP
如何使用Strace调试工具
2013/06/03 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
给Function做的OOP扩展
2009/05/07 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
关于Keras Dense层整理
2020/05/21 Python
Python新手学习raise用法
2020/06/03 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
纽约手袋品牌:KARA
2018/03/18 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
写好自荐信的技巧
2013/11/08 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
信仰观后感
2015/06/03 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS