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 concat数组累加 示例
Sep 03 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
Oct 11 Javascript
jQuery手机拨号界面特效代码分享
Aug 27 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
Dec 01 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
Jul 03 Javascript
vue插槽slot的理解和使用方法
Apr 03 Javascript
微信小程序从注册账号到上架(图文详解)
Jul 17 Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 Javascript
JS一次前端面试经历记录
Mar 19 Javascript
Vue 的双向绑定原理与用法揭秘
May 06 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 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 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
jscript读写二进制文件的方法
2015/04/22 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python实现人脸识别代码
2017/11/08 Python
Python实现图片拼接的代码
2018/07/02 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
家长给孩子的评语
2014/01/30 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
装配出错检讨书
2014/09/23 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
北京故宫导游词
2015/01/31 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
个人政治思想总结
2015/03/05 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
同意报考公务员证明
2015/06/17 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL