【简介】

zTree 是利用 jQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件

  • 兼容 IE、FireFox、Chrome 等浏览器
  • 在一个页面内可同时生成多个 Tree 实例
  • 支持 JSON 数据
  • 支持一次性静态生成 和 Ajax 异步加载 两种方式
  • 支持多种事件响应及反馈
  • 支持 Tree 的节点移动、编辑、删除
  • 支持任意更换皮肤 / 个性化图标(依靠css)
  • 支持极其灵活的 checkbox 或 radio 选择功能
  • 简单的参数配置实现 灵活多变的功能

    zTree博客地址:http://ztreeapi.iteye.com/

    目前zTree作者已经入驻ItEye,如果有什么需要学习的完全可以到作者博客上去学习,而且zTree的版本已经更新了很多次了,下面的内容跟最新版估计会有很大出入,我不能保证下面的教程在最新版可用。zTree真的是非常强大的树组件,希望能对大家有所帮助!

    在官网能够下载到zTree的源码、实例和API,其中作者pdf的API写得非常详细(中文的哦)

    【部分函数和属性介绍】

  • 核心:zTree(setting, [zTreeNodes])

    这个函数接受一个JSON格式的数据对象setting和一个JSON格式的数据对象zTreeNodes,从而建立 Tree。

  • 核心参数:setting

    zTree 的参数配置都在这里完成,简单的说:树的样式、事件、访问路径等都在这里配置

    setting 举例:

    1. var setting = {
    2. showLine: true,
    3. checkable: true
    4. };

    因为参数太多,具体参数详见zTreeAPI

  • 核心参数:zTreeNodes

    zTree 的全部节点数据集合,采用由JSON对象组成的数据结构,简单的说:这里使用Json格式保存了树的所有信息

    zTreeNodes的格式分为两种:利用Json格式嵌套体现父子关系和Array简单格式

    ①带有父子关系的标准 zTreeNodes 举例:

    1. var zTreeNodes = [
    2. {"id":1, "name":"test1", "nodes":[
    3. {"id":11, "name":"test11", "nodes":[
    4. {"id":111, "name":"test111"}
    5. ]},
    6. {"id":12, "name":"test12"}
    7. ]},
    8. ......
    9. ];

    ②带有父子关系的简单 Array 格式(isSimpleData)的 zTreeNodes 举例:

    1. var treeNodes = [
    2. {"id":1, "pId":0, "name":"test1"},
    3. {"id":11, "pId":1, "name":"test11"},
    4. {"id":12, "pId":1, "name":"test12"},
    5. {"id":111, "pId":11, "name":"test111"},
    6. ......
    7. ];

    【实例一】(Java代码)

    ①在页面引用zTree的js和css:

    1. <!-- ZTree树形插件 -->
    2. <link rel="stylesheet" href="<%=root%>/Web/common/css/zTreeStyle/zTreeStyle.css" type="text/css">
    3. <!-- <link rel="stylesheet" href="<%=root%>/Web/common/css/zTreeStyle/zTreeIcons.css" type="text/css">  -->
    4. <script type="text/javascript" src="<%=root%>/Web/common/js/jquery-ztree-2.5.min.js"></script>

    ②在script脚本中定义setting和zTreeNodes

    1. var setting = {
    2. isSimpleData : true,              //数据是否采用简单 Array 格式,默认false
    3. treeNodeKey : "id",               //在isSimpleData格式下,当前节点id属性
    4. treeNodeParentKey : "pId",        //在isSimpleData格式下,当前节点的父节点id属性
    5. showLine : true,                  //是否显示节点间的连线
    6. checkable : true                  //每个节点上是否显示 CheckBox
    7. };
    8. var treeNodes = [
    9. {"id":1, "pId":0, "name":"test1"},
    10. {"id":11, "pId":1, "name":"test11"},
    11. {"id":12, "pId":1, "name":"test12"},
    12. {"id":111, "pId":11, "name":"test111"},
    13. ];

    ③在进入页面时生成树结构:

    1. var zTree;
    1. $(function() {
    2. zTree = $("#tree").zTree(setting, treeNodes);
    3. });

    ④最后查看效果:

    【实例二】(从后台获取简单格式Json数据)

    ①后台代码封装简单格式Json数据:

    1. public void doGetPrivilegeTree() throws IOException{
    2. String s1 = "{id:1, pId:0, name:\"test1\" , open:true}";
    3. String s2 = "{id:2, pId:1, name:\"test2\" , open:true}";
    4. String s3 = "{id:3, pId:1, name:\"test3\" , open:true}";
    5. String s4 = "{id:4, pId:2, name:\"test4\" , open:true}";
    6. List<String> lstTree = new ArrayList<String>();
    7. lstTree.add(s1);
    8. lstTree.add(s2);
    9. lstTree.add(s3);
    10. lstTree.add(s4);
    11. //利用Json插件将Array转换成Json格式
    12. response.getWriter().print(JSONArray.fromObject(lstTree).toString());
    13. }

    ②页面使用Ajax获取zTreeNodes数据再生成树

    1. var setting = {
    2. isSimpleData : true,              //数据是否采用简单 Array 格式,默认false
    3. treeNodeKey : "id",               //在isSimpleData格式下,当前节点id属性
    4. treeNodeParentKey : "pId",        //在isSimpleData格式下,当前节点的父节点id属性
    5. showLine : true,                  //是否显示节点间的连线
    6. checkable : true                  //每个节点上是否显示 CheckBox
    7. };
    8. var zTree;
    9. var treeNodes;
    10. $(function(){
    11. $.ajax({
    12. async : false,
    13. cache:false,
    14. type: 'POST',
    15. dataType : "json",
    16. url: root+"/ospm/loginInfo/doGetPrivilegeTree.action",//请求的action路径
    17. error: function () {//请求失败处理函数
    18. alert('请求失败');
    19. },
    20. success:function(data){ //请求成功后处理函数。
    21. alert(data);
    22. treeNodes = data;   //把后台封装好的简单Json格式赋给treeNodes
    23. }
    24. });
    25. zTree = $("#tree").zTree(setting, treeNodes);
    26. });

    ③最后显示效果

    【实例三】从后台动态获取数据,树节点提供右键菜单功能

    ①配置setting:

    1. var url = "/ospm/loginInfo/doGetPrivilegeTree.action";
    2. //zTree基本设置
    3. var setting = {
    4. async : true, //需要采用异步方式获取子节点数据,默认false
    5. asyncUrl : root + url, //当 async = true 时,设置异步获取节点的 URL 地址 ,允许接收 function 的引用
    6. asyncParam : ["id"], //提交的与节点数据相关的必需参数
    7. isSimpleData : true, //数据是否采用简单 Array 格式,默认false
    8. treeNodeKey : "id", //在isSimpleData格式下,当前节点id属性
    9. treeNodeParentKey : "parentId", //在isSimpleData格式下,当前节点的父节点id属性
    10. nameCol : "privName",            //在isSimpleData格式下,当前节点名称
    11. expandSpeed : "fast", //设置 zTree节点展开、折叠时的动画速度或取消动画(三种默认定义:"slow", "normal", "fast")或 表示动画时长的毫秒数值(如:1000)
    12. showLine : true, //是否显示节点间的连线
    13. callback : { //回调函数
    14. rightClick : zTreeOnRightClick   //右键事件
    15. }
    16. };

    ②配置鼠标右键事件,显示右键菜单的代码

    1. //显示右键菜单
    2. function showRMenu(type, x, y) {
    3. $("#rMenu ul").show();
    4. if (type=="root") {
    5. $("#m_del").hide();
    6. $("#m_check").hide();
    7. $("#m_unCheck").hide();
    8. }
    9. $("#rMenu").css({"top":y+"px", "left":x+"px", "display":"block"});
    10. }
    11. //隐藏右键菜单
    12. function hideRMenu() {
    13. $("#rMenu").hide();
    14. }
    15. //鼠标右键事件-创建右键菜单
    16. function zTreeOnRightClick(event, treeId, treeNode) {
    17. if (!treeNode) {
    18. zTree.cancelSelectedNode();
    19. showRMenu("root", event.clientX, event.clientY);
    20. } else if (treeNode && !treeNode.noR) { //noR属性为true表示禁止右键菜单
    21. if (treeNode.newrole && event.target.tagName != "a" && $(event.target).parents("a").length == 0) {
    22. zTree.cancelSelectedNode();
    23. showRMenu("root", event.clientX, event.clientY);
    24. } else {
    25. zTree.selectNode(treeNode);
    26. showRMenu("node", event.clientX, event.clientY);
    27. }
    28. }
    29. }
    1. <p><span style=""><!-- 右键菜单div -->
    2. <div id="rMenu" style="position:absolute; display:none;">
    3. <li>
    4. <ul id="m_add" onclick="addPrivilege();"><li>增加</li></ul>
    5. <ul id="m_del" onclick="delPrivilege();"><li>删除</li></ul>
    6. <ul id="m_del" onclick="editPrivilege();"><li>编辑</li></ul>
    7. <ul id="m_del" onclick="queryPrivilege();"><li>查看</li></ul>
    8. </li>
    9. </div></span></p>

    ③页面加载时生成树并且监听鼠标点击事件,及时隐藏右键菜单

    1. function reloadTree() {
    2. hideRMenu();
    3. zTree = $("#tree").zTree(setting, treeNodes);
    4. }
    5. var zTree;
    6. var treeNodes = [];
    7. $(function() {
    8. reloadTree();
    9. $("body").bind(//鼠标点击事件不在节点上时隐藏右键菜单
    10. "mousedown",
    11. function(event) {
    12. if (!(event.target.id == "rMenu" || $(event.target)
    13. .parents("#rMenu").length > 0)) {
    14. $("#rMenu").hide();
    15. }
    16. });
    17. });

    ④后台代码根据id获取树节点信息

    -----------------------Action层-----------------------

    1. public void doGetPrivilegeTree() throws IOException{
    2. String sId = request.getParameter("id");
    3. int treeId = 0;
    4. if(sId!=null&&!"".equals(sId)){
    5. treeId = Integer.parseInt(sId);
    6. }
    7. List<Privilege> lstPriv = privilegeService.findPrivilegeTreeById(treeId);
    8. response.setCharacterEncoding("UTF-8");
    9. response.getWriter().print(JSONArray.fromObject(lstPriv).toString());
    10. }

    -----------------------Service层-----------------------

    1. /**
    2. * 根据节点id,查询其下级节点的数据
    3. */
    4. @SuppressWarnings("unchecked")
    5. @Override
    6. public List<Privilege> findPrivilegeTreeById(int treeId) {
    7. StringBuffer sbTree= new StringBuffer();
    8. sbTree.append("SELECT NEW Privilege(p.id,p.privName,p.description,p.status,p.isLeaf,p.parentId) FROM Privilege p ");
    9. sbTree.append("WHERE p.parentId=:treeId ");
    10. sbTree.append("AND p.status!=:del ");
    11. Map<String,Object> mapTree = new HashMap<String, Object>();
    12. mapTree.put("treeId", treeId);
    13. mapTree.put("del", Privilege.PRIV_STATUS_DELETE);
    14. return (List<Privilege>) privilegeDao.findByHql(sbTree.toString(), mapTree);
    15. }

    ⑤最后查看效果:

[转]juery-zTree的基本用法的更多相关文章

  1. Nice Validator(Form验证)及Juery zTree控件

    http://niceue.com/validator/demo/match.php http://www.ztree.me/v3/demo.php#_603

  2. 树 插件 ztree 的基本用法

    因业务需要 用到 ztree 插件 第一次用tree插件上手有点难度 官网 http://www.treejs.cn/v3/main.php#_zTreeInfo 第一步:初始化树,树的所有数据从后台 ...

  3. 文件夹管理工具(MVC+zTree+layer)(附源码)

    写在前 之前写了一篇关于 文件夹与文件的操作的文章  操作文件方法简单总结(File,Directory,StreamReader,StreamWrite )  把常用的对于文件与文件夹的操作总结了一 ...

  4. 文件夹管理工具(MVC+zTree+layer)

    文件夹管理工具(MVC+zTree+layer)(附源码)   写在前 之前写了一篇关于 文件夹与文件的操作的文章  操作文件方法简单总结(File,Directory,StreamReader,St ...

  5. zTree静态树与动态树的用法——(七)

    0.[简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实 ...

  6. js zTree的用法

    代码如下: <script type="text/javascript">    var reginTree = {    setting: {        view ...

  7. jQuery Ztree基本用法

    1.首先在页面上有<ul/>标签 <ul id="tree" class="ztree"></ul> 2.定义ztree的配 ...

  8. jq生成目录文件树jQuery Ztree基本用法

    转自:http://www.cnblogs.com/linjiqin/p/4547452.html 1.首先在页面上有<ul/>标签 ? 1 <ul id="tree&qu ...

  9. Ztree节点增加删除修改和Icheck的用法

    简介 官方文档:http://www.treejs.cn/v3/api.php zTree 是一个依靠 jQuery 实现的多功能 “树插件”, 而且拥有较好的浏览器兼容性,有着丰富的功能以及可以自定 ...

  10. ztree的用法

    哎哟,好久没写什么这个虽然没人看的博客了,其实这段时间情绪非常低谷,就没有写博客了,不过我还是回来了,回到正题,在前端页面编程的时候,我们经常用到树状,用原始的树状呢,功能没有那么强大,所以这个时候 ...

随机推荐

  1. Java面向对象知道这些就够了

    面向对象 面向对象是一种思维方式,相对于面向过程而言的. 面向过程在流程中关注动作执行的每一个细节 — 自己动手做 面向对象重点找这个对象,只要找到了对象,那么这个对象所具有的功能就能够被使用 — 找 ...

  2. 用HANA STADIO 开发ABAP程序

    Help-->Install New Software-->ADD NAME: hana_on_mars Location: https://tools.hana.ondemand.com ...

  3. Redis4.0新特性

    redis 4.0 新特性 Redis 4.0在2017年7月发布为GA.包含几个重大改进:更好的复制(PSYNC2),线程DEL / FLUSH,混合RDB + AOF格式,活动内存碎片整理,内存使 ...

  4. idea中注解配置一对多,多对一,双向多对一映射(不详细)

    一对多 package cn.pojo; import javax.persistence.*; import java.io.Serializable; import java.util.Set; ...

  5. SSM框架理解搭建(虽然是网上拼的,但是实际按照搭建是可以的)——

    SpringSpring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象.Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地 ...

  6. 在Liunx上搭建FTP并配置用户权限

    伴随着.Net Core的开源,公司前几天上了新的Liunx服务器,我在前几篇文章中介绍了如何搭建环境以及部署.Net Core应用. 然后,今天客户和我说想自己给网站做推广,需要用FTP链接我们的服 ...

  7. redis之cluster(集群)

    搭建redis cluster 1. 准备节点 2. 节点间的通信 3. 分配槽位给节点 redis-cluster架构 多个服务端,负责读写,彼此通信,redis指定了16384个槽. 多匹马儿,负 ...

  8. python七类之列表元组

    列表 一.关键字:  list  lst = [ , , , , , , ,] lst = [1,2,3,4] 二.方法: 1.增加:​ . append( ) #追加​​​,添加元素进列表最后 ls ...

  9. Leecode刷题之旅-C语言/python-88合并两个有序数组

    /* * @lc app=leetcode.cn id=88 lang=c * * [88] 合并两个有序数组 * * https://leetcode-cn.com/problems/merge-s ...

  10. Node.js中的不安全跳转如何防御详解

    Node.js中的不安全跳转如何防御详解 导语: 早年在浏览器大战期间,有远见的Chrome认为要运行现代Web应用,浏览器必须有一个性能非常强劲的Java引擎,于是Google自己开发了一个高性能的 ...