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中if语句的几种优化代码写法
Mar 12 Javascript
JavaScript创建类/对象的几种方式概述及实例
May 06 Javascript
使用jQuery和PHP实现类似360功能开关效果
Feb 12 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
Nov 30 Javascript
微信小程序通过api接口将json数据展现到小程序示例
Jan 20 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
vue 虚拟dom的patch源码分析
Mar 01 Javascript
详解Vue.js使用Swiper.js在iOS
Sep 10 Javascript
es6数据变更同步到视图层的方法
Mar 04 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
vue 自定义组件添加原生事件
Apr 21 Vue.js
神级程序员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实现登陆验证码(类似条行码状)
2006/10/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
js中的this关键字详解
2013/09/25 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
python赋值操作方法分享
2013/03/23 Python
python更新列表的方法
2015/07/28 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python实现串口自动触发工作的示例
2019/07/02 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
Ibatis如何使用动态表名
2015/07/12 面试题
调解员先进事迹材料
2014/02/07 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
车队司机自我鉴定
2014/03/02 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
2014公司年终工作总结
2014/12/19 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
导游词之无锡古运河
2019/11/14 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers