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 学习笔记(十一)
Jan 19 Javascript
jquery中ajax学习笔记一
Oct 16 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
Dec 12 Javascript
jQuery的Ajax的自动完成功能控件简要说明
Feb 22 Javascript
jquery插件开发之实现google+圈子选择功能
Mar 10 Javascript
Js操作树节点自动折叠展开的几种方法
May 05 Javascript
js通过iframe加载外部网页的实现代码
Apr 05 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
Feb 04 Javascript
Angular使用$http.jsonp发送跨站请求的方法
Mar 16 Javascript
BootStrap 动态表单效果
Jun 02 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
Jan 12 Javascript
微信小程序实现评论功能
Nov 28 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
PHP4实际应用经验篇(6)
2006/10/09 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
python opencv之分水岭算法示例
2018/02/24 Python
python3 读取Excel表格中的数据
2018/10/16 Python
python的常见矩阵运算(小结)
2019/08/07 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
keras中的History对象用法
2020/06/19 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
python中spy++的使用超详细教程
2021/01/29 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
代理人委托书
2014/09/16 职场文书
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL