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 相关文章推荐
EXT中xtype的含义分析
Jan 07 Javascript
Javascript通过overflow控制列表闭合与展开的方法
May 15 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
Jan 24 Javascript
jquery uploadify如何取消已上传成功文件
Feb 08 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
Angular 向组件传递模板的两种方法
Feb 23 Javascript
Node.js 使用AngularJS的方法示例
May 11 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
Dec 06 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
JS如何实现基于websocket的多端桥接平台
May 14 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中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
PHP使用函数用法详解
2018/09/30 PHP
javascript 打印页面代码
2009/03/24 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
js实现图片推拉门效果代码实例
2019/05/18 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python检测生僻字的实现方法
2016/10/23 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
喷漆工的岗位职责
2014/03/17 职场文书
献爱心倡议书
2014/04/14 职场文书
常务副总经理任命书
2014/06/05 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL