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开发技术大全-第3章 js数据类型
Jul 03 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
May 13 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
Jun 20 Javascript
javascript ajax的5种状态介绍
Aug 18 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
Sep 15 Javascript
jquery通过name属性取值的简单实现方法
Jun 20 Javascript
基于daterangepicker日历插件使用参数注意的问题
Aug 10 Javascript
Vue中之nextTick函数源码分析详解
Oct 17 Javascript
vue组件发布到npm简单步骤
Nov 30 Javascript
jQuery中元素选择器(element)简单用法示例
May 14 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
Python实现类继承实例
2014/07/04 Python
Python实现二分法算法实例
2015/02/02 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
python让函数不返回结果的方法
2020/06/22 Python
使用Python封装excel操作指南
2021/01/29 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
高一自我鉴定
2013/12/17 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python