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实现的listview效果
Apr 28 Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
Sep 17 Javascript
利用Js+Css实现折纸动态导航效果实例源码
Jan 25 Javascript
Node.js常用工具之util模块
Mar 09 Javascript
js实现鼠标拖拽多选功能示例
Aug 01 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
Aug 28 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
Sep 06 Javascript
vue 解决computed修改data数据的问题
Nov 06 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
类的另类用法--数据的封装
2006/10/09 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
用循环或if语句从json中取数据示例
2014/08/18 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
如何在python中使用selenium的示例
2017/12/26 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
Python如何实现机器人聊天
2020/09/10 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
社区工作者思想汇报
2014/01/13 职场文书
素质拓展感言
2014/01/29 职场文书
社团招新策划书
2014/02/04 职场文书
会计学专业自荐信
2014/06/25 职场文书
雨中的树观后感
2015/06/03 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
js不常见操作运算符总结
2021/11/20 Javascript