1.ztree简介

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。专门适合项目开发,尤其是 树状菜单、树状数据的Web显示、权限管理等等。
zTree 是开源免费的软件(MIT 许可证)。在开源的作用下,zTree 越来越完善,目前已经拥有了不少粉丝,并且今后还会推出更多的 zTree 扩展功能库,让 zTree 更加强大。

2.ztree入门

  步骤 1、文件准备

    将需要使用的 zTree v3.x 相关的 js、css、img 文件分别放置到相应目录,并且保证相对路径正确

  步骤 2、编写 html 页面

    按照以下代码,制作 html 页面,访问试试看吧,注意:
      1) "<!DOCTYPE html>" 是必需的!
      2) zTree 的容器 className 别忘了设置为 "ztree"

 1 <!DOCTYPE html>
 2 <HTML>
 3  <HEAD>
 4   <TITLE> ZTREE DEMO </TITLE>
 5   <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 6   <link rel="stylesheet" href="demoStyle/demo.css" type="text/css">
 7   <link rel="stylesheet" href="zTreeStyle/zTreeStyle.css" type="text/css">
 8   <script type="text/javascript" src="jquery-1.4.2.js"></script>
 9   <script type="text/javascript" src="jquery.ztree.core-3.x.js"></script>
10   <SCRIPT LANGUAGE="JavaScript">
11    var zTreeObj;
12    // zTree 的参数配置,深入使用请参考 API 文档(setting 配置详解)
13    var setting = {};
14    // zTree 的数据属性,深入使用请参考 API 文档(zTreeNode 节点数据详解)
15    var zNodes = [
16    {name:"test1", open:true, children:[
17       {name:"test1_1"}, {name:"test1_2"}]},
18    {name:"test2", open:true, children:[
19       {name:"test2_1"}, {name:"test2_2"}]}
20    ];
21    $(document).ready(function(){
22       zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, zNodes);
23    });
24   </SCRIPT>
25  </HEAD>
26 <BODY>
27 <div>
28    <ul id="treeDemo" class="ztree"></ul>
29 </div>
30 </BODY>
31 </HTML>

View Code

3.制作如下图所示的案例

 

步骤1.下载ztree插件

下载地址:  https://pan.baidu.com/s/11rAiA5Gsr7kIoFIqA5KSCA

步骤2.将插件引入到项目中

 <link rel="stylesheet" type="text/css" href="static/zTree/css/zTreeStyle/zTreeStyle.css"/><script type="text/javascript" src="static/zTree/js/jquery-1.4.4.min.js"></script><script type="text/javascript" src="static/zTree/js/jquery.ztree.core.js"></script><script type="text/javascript" src="static/zTree/js/jquery.ztree.all.min.js"></script>

步骤3.html代码

 <ul id="treeDemo" class="ztree" style="margin-top: 10px; width: 200px; height: 150px;"></ul>

步骤4.初始话树

 function createTree(url,params, treeId) {var zTree; //用于保存创建的树节点var setting = { //设置check: {enable: true,chkboxType: {"Y": "ps","N": "ps"}},view: {showLine: true, //显示辅助线dblClickExpand: true},data: {simpleData: {enable: true,idKey: "id",pIdKey: "pid",rootPId: 0}}};$.ajax({ //请求数据,创建树type: 'GET',url: url,data: params,dataType: "json", //返回的结果为jsonsuccess: function (data) {zTree = $.fn.zTree.init($(treeId), setting, data); //创建树},error: function (data) {alert("创建树失败!");}});}function initTree() {var roleId=$("#roleId").val();var params={roleId:roleId};createTree("permission/menuData", params,"#treeDemo");//创建  permission/menuData 后台加载数据路由}initTree();

注意: 这里使用的是ajax加载数据,一定要保证在 初始化树之前 加载数据,如果先加载数据在初始化树会出问题

附加 完整生产代码

1.html

  1 <%@ page language="java" contentType="text/html; charset=UTF-8"
  2          pageEncoding="UTF-8" %>
  3 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4 <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
  5 <%
  6     String path = request.getContextPath();
  7     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/";
  8 %>
  9 <!DOCTYPE html>
 10 <html lang="en">
 11 <head>
 12     <base href="<%=basePath%>">
 13     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 14     <meta charset="UTF-8">
 15     <title>角色编辑</title>
 16     <link rel="stylesheet" href="static/layui/css/layui.css">
 17     <link rel="stylesheet" href="static/css/common.css">
 18     <link rel="stylesheet" href="static/css/schoolInfo.css">
 19     <link rel="stylesheet" href="static/css/teacherInfo.css">
 20     <!--[if IE 8]>
 21    <!-- <link rel="stylesheet" type="text/css" href="static/css/ie.css"/>-->
 22     <link rel="stylesheet" type="text/css" href="static/zTree/css/zTreeStyle/zTreeStyle.css"/>
 23     <script type="text/javascript" src="static/zTree/js/jquery-1.4.4.min.js"></script>
 24     <script type="text/javascript" src="static/zTree/js/jquery.ztree.core.js"></script>
 25     <script type="text/javascript" src="static/zTree/js/jquery.ztree.all.min.js"></script>
 26
 27
 28     <![endif]-->
 29     <style>
 30         .fz13 { 31             font-size: 13px;
 32         }
 33
 34         .xy-layer-main { 35             width: 73%;
 36             height: 60%;
 37         }
 38     </style>
 39 </head>
 40 <body class="content">
 41 <div id="app">
 42     <div class="xy-backdrop" hidden onclick="showFlashDialog()"><img src="static/images/loding.gif"></div>
 43     <p class="p-title"></p>
 44     <%--  <form class="layui-form row-between form" action="" enctype="multipart/form-data" id="teacher_role_form">--%>
 45
 46     <div class="form-right fl layui-form">
 47         <p class="text-title">角色信息</p>
 48         <div class="flex-start b-bottom mt30">
 49             <div class="layui-form-item  ">
 50                 <div class="layui-inline">
 51                     <label class="layui-form-label"><span class="fcred">*</span>角色名称:</label>
 52                     <div class="layui-input-block wh20">
 53                         <input id="roleName" type="text" name="roleName" maxlength="10" lay-verify="name"
 54                                onkeydown="if(event.keyCode==32) return false" autocomplete="off" placeholder="角色名称"
 55                                class="layui-input" value="${role.roleName}">
 56                     </div>
 57                 </div>
 58
 59                 <div class="layui-inline">
 60                     <label class="layui-form-label"><span class="fcred">*</span>角色备注:</label>
 61                     <div class="layui-input-block wh20">
 62                         <input id="remark" type="text" name="remark" maxlength="10" lay-verify="name"
 63                                onkeydown="if(event.keyCode==32) return false" autocomplete="off" placeholder="角色备注"
 64                                class="layui-input" value="${role.remark}">
 65                     </div>
 66                 </div>
 67
 68             </div>
 69         </div>
 70
 71
 72         <div class="b-bottom">
 73             <p class="text-title">角色菜单</p>
 74             <div class="layui-form-item mt30">
 75                 <div class="layui-inline" style="height: 400px">
 76                     <ul id="treeDemo" class="ztree" style="margin-top: 10px; width: 200px; height: 150px;">
 77                     </ul>
 78                </div>
 79             </div>
 80         </div>
 81
 82
 83         <!--修改信息-->
 84         <input id="roleId" value="${role.id}" hidden>
 85         <div class="layui-form-item text-center">
 86             <button id="myButton" type="submit"
 87                     class="layui-btn layui-btn-radius bg-org box-shaow-org wh135px" lay-submit=""
 88                     lay-filter="demoRole">保存
 89             </button>
 90         </div>
 91     </div>
 92     <%--  </form>--%>
 93
 94
 95 </div>
 96 <script src="static/layui/layui.js"></script>
 97 <script src="static/js/jquery-1.8.3.js"></script>
 98 <script src="static/js/public.js"></script>
 99 <script src="static/js/jquery.form.js"></script>
100 <script type="text/javascript" src="static/zTree/js/jquery-1.4.4.min.js"></script>
101 <script type="text/javascript" src="static/zTree/js/jquery.ztree.core.js"></script>
102 <script type="text/javascript" src="static/zTree/js/jquery.ztree.all.min.js"></script>
103 <%--<script type="text/javascript" src="static/zTree/js/jquery.ztree.excheck.js"></script>--%>
104
105
106 <script type="text/javascript">
107     var aa = {aa: 1};
108     var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
109     var imgAA = 0;
110
111     var teacherImg, layer, form;
112     layui.use(['form'], function () {
113         form = layui.form;
114         layer = layui.layer;
115
116         //监听提交
117         form.on('submit(demoRole)', function (data) {
118
119
120         });
121     });
122     /**
123      * 保存选中的数据
124      */
125     $("#myButton").click(function () {
126         var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
127         var nodes = treeObj.getCheckedNodes(true);
128         if (0 === nodes.length) {
129             alert("请选择!");
130             return;
131         }
132         var dataNodes = "";
133         for (var i = 0; i < nodes.length; i++) {
134             dataNodes += nodes[i].id + ",";
135         }
136         updateOrAddRole(dataNodes);
137
138     });
139     function updateOrAddRole(menuIds) {
140         var roleId = $("#roleId").val();
141         var roleName = $("#roleName").val();
142         var remark = $("#remark").val();
143         var params = {
144             roleId: roleId,
145             menuIds: menuIds,
146             roleName: roleName,
147             remark: remark
148         };
149         var url = "permission/updateOrAddRole";
150         uwillBeAsyncTrue.getdata(url, params, function (data) {
151             var code = data.code;
152             if (code == '0000') {
153                 layer.msg("操作成功");
154                 setTimeout(function test() {
155                     var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
156                     $('#search', window.parent.document).click();
157                     parent.layer.close(index);  // 关闭layer
158                 }, 800);
159             } else {
160                 layer.alert("操作失败", {icon: 2});
161             }
162         });
163     }
164     function createTree(url,params, treeId) {
165         var zTree; //用于保存创建的树节点
166         var setting = { //设置
167             check: {
168                 enable: true,
169                 chkboxType: {
170                     "Y": "ps",
171                     "N": "ps"
172                 }
173             },
174             view: {
175                 showLine: true, //显示辅助线
176                 dblClickExpand: true
177             },
178             data: {
179                 simpleData: {
180                     enable: true,
181                     idKey: "id",
182                     pIdKey: "pid",
183                     rootPId: 0
184                 }
185             }
186         };
187         $.ajax({ //请求数据,创建树
188             type: 'GET',
189             url: url,
190             data: params,
191             dataType: "json", //返回的结果为json
192             success: function (data) {
193                 zTree = $.fn.zTree.init($(treeId), setting, data); //创建树
194             },
195             error: function (data) {
196                 alert("创建树失败!");
197             }
198         });
199     }
200     function initTree() {
201         var roleId=$("#roleId").val();
202         var params={
203             roleId:roleId
204         };
205         createTree("permission/menuData", params,"#treeDemo");//创建
206     }
207     initTree();
208 </script>
209 </body>
210 </html>

View Code

2.数据格式拼接(请注意数据格式)

 1  @Override
 2     public List<Map<String, Object>> menuData(Integer roleId) {
 3         //封装所有数据
 4         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
 5         //获取到 当前角色下的 菜单id
 6         List<PageData> list1;
 7         if (roleId == null || roleId == -1) {
 8             list1 = new ArrayList<>();
 9         } else {
10             list1 = permissionDao.queryMenuBuyRoleId(roleId);
11         }
12         //查询二级 和一下的菜单封装
13         List<Menu> listTwo = teacherDao.queryMenu(2);
14         for (Menu tree_menu_two : listTwo) {
15             Map<String, Object> map = new HashMap<String, Object>();
16             Integer id = tree_menu_two.getId();
17             for (PageData roleMenu : list1) {
18                 Integer menuId = roleMenu.getInt("menuId");
19                 if (id.equals(menuId)) {
20                     tree_menu_two.setChecked(true);
21                     break;
22                 }
23             }
24             map.put("id", Integer.valueOf(tree_menu_two.getMenuLevel() + "" + id));
25             map.put("mid", id);
26             map.put("name", tree_menu_two.getMenuName());
27             map.put("menuUrl", tree_menu_two.getMenuUrl());
28             map.put("menuOrder", tree_menu_two.getMenuOrder());
29             map.put("menuIcon", tree_menu_two.getMenuIcon());
30             map.put("checked", tree_menu_two.isChecked());
31             Integer menuLevel = tree_menu_two.getMenuLevel();
32             if (menuLevel > 1) {
33                 map.put("pid", Integer.valueOf((menuLevel - 1) + "" + tree_menu_two.getPid()));
34             } else {
35                 map.put("pid", 0);
36             }
37             map.put("mpid", tree_menu_two.getPid());
38             list.add(map);
39         }
40         return list;
41     }

View Code

 完美!

转载于:https://www.cnblogs.com/newAndHui/p/10406480.html

ztree带有选项框的树形菜单使用相关推荐

  1. 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单

    jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...

  2. 章鱼大数据实验机中无法输入字母会自动选择选项框中的菜单

    解决: 右键点击这里的键盘图标,选择重新启动就可以了.

  3. ztree树形菜单demo

    阅读目录 zTree树形菜单 回到顶部 zTree树形菜单 树形菜单使用方式如下: HTML引入的方式如下: <!DOCTYPE html><html><head> ...

  4. SpringMVC+ZTree实现树形菜单权限配置

    计划在开源项目里加入权限配置的功能,打算加入zTree实现树形结构. Team的Github开源项目链接:https://github.com/u014427391/jeeplatform 欢迎sta ...

  5. zTree树形菜单交互选项卡效果实现

    1. 添加自定义属性 page 2. 为 ztree 每个树形节点,添加点击事件 <!DOCTYPE html> <html><head><meta char ...

  6. zTree树形菜单使用实例

    在每个节点添加 id 和 pid, id 表示当前节点编号,pid 表示父节点编号 第一步:在页面显示菜单位置,添加 ul设置 class="ztree" 第二步:开启简单数据格式 ...

  7. 使用ztree展示树形菜单结构

    官网:http://www.treejs.cn/v3/main.php#_zTreeInfo 一.功能简介 在权限系统中,实现给角色指定菜单权限的功能.主要包括以下几点: 读取全部菜单项,并以树形结构 ...

  8. Struts2+Hibernate+Spring+ZTree+Dtree 实现树形菜单

    2019独角兽企业重金招聘Python工程师标准>>> 1.第一步配置web.xml <?xml version="1.0" encoding=" ...

  9. ztree实现树形菜单

    实现后的结果大致是这样的 其具体实现过程呢如下: 首先需要引入几个js和css样式: <link href="../../ext-res/ztree/css/demo.css" ...

  10. 使用ztree异步加载数据库数据形成树形菜单

    -搞了好久好久,在此记录一下这个这个胜利的时刻!!!!作为一个合格的程序员,任重而道远啊- 项目环境:thinkphp5+mysql+ztree 项目目标:从MySQL数据库获取小区用户位置信息.用户 ...

最新文章

  1. 用Python做地图投影 - 多面孔的世界
  2. Flutter学习之”相对布局“
  3. Android进程间通信(IPC)机制Binder简要介绍和学习计划
  4. 20165310 Java实验五《网络编程与安全》
  5. encipher.min.php,陌屿授权系统(5.7)最新版 网站授权 - 下载 - 搜珍网
  6. linux查看文件从底部开始,linux中怎样从底部向上查看log文件
  7. Matlab与C/C++混合编程调用OpenCV
  8. TensorFlow tf.keras.layers.Permute
  9. 【转】HTML标签大全
  10. 迪赛智慧数——柱状图(正负条形图):应届生各行业平均薪酬排行
  11. 从程序员到项目经理转自西门吹雪
  12. 腾讯信鸽集成华为厂商通道
  13. 「To B端增长黑客」 获客矩阵
  14. python substr_Python字符串的方法
  15. H2教程系列(二) 创建数据库
  16. Java——接口与实现类
  17. InsightFace又出新作!合成更真实更多样近红外人脸图片,助力“近红外-可见光”跨域人脸识别...
  18. OpenGL 图形学基础知识汇总
  19. linux 游戏引擎库,用C++实现跨平台游戏引擎开发
  20. 关于left,top和translate2d以及translate3d性能问题的详讲

热门文章

  1. 拓端tecdat|R语言实现有限混合模型建模分析
  2. 代写R语言assignment经常用到的代码语法分享!
  3. Linux复习-硬盘相关知识点
  4. 光纤传输与网络技术作业(第一部分)
  5. tensorflow数据预处理
  6. MatConvnet工具箱文档翻译理解五
  7. caffe中 solver.prototxt文件
  8. 【机器学习】Tensorflow基本使用
  9. 【Caffe代码解析】compute_image_mean
  10. LinkedHashMap介绍