Jquery-zTree的基本用法

【简介】

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

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

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

    • 核心参数:setting

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

    setting 举例:

    Js代码  

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

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

    • 核心参数:zTreeNodes

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

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

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

    Js代码  

    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 举例:

    Js代码  

    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:

    Html代码  

    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

    Java代码  

    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. ];

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

    Js代码  

    1. var zTree;

    Js代码  

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

    ④最后查看效果:

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

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

    Java代码  

    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数据再生成树

  • var setting = {
        isSimpleData : true,              //数据是否采用简单 Array 格式,默认false
        treeNodeKey : "id",               //在isSimpleData格式下,当前节点id属性
        treeNodeParentKey : "pId",        //在isSimpleData格式下,当前节点的父节点id属性
        showLine : true,                  //是否显示节点间的连线
        checkable : true                  //每个节点上是否显示 CheckBox
    };
    
    var zTree;
    var treeNodes;
    
    $(function(){
        $.ajax({
            async : false,
            cache:false,
            type: ‘POST‘,
            dataType : "json",
            url: root+"/ospm/loginInfo/doGetPrivilegeTree.action",//请求的action路径
            error: function () {//请求失败处理函数
                alert(‘请求失败‘);
            },
            success:function(data){ //请求成功后处理函数。
                alert(data);
                treeNodes = data;   //把后台封装好的简单Json格式赋给treeNodes
            }
        });
    
        zTree = $("#tree").zTree(setting, treeNodes);
    });
  •  

    ③最后显示效果

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

    ①配置setting:

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

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

    //显示右键菜单
        function showRMenu(type, x, y) {
            $("#rMenu ul").show();
            if (type=="root") {
                $("#m_del").hide();
                $("#m_check").hide();
                $("#m_unCheck").hide();
            }
            $("#rMenu").css({"top":y+"px", "left":x+"px", "display":"block"});
        }
        //隐藏右键菜单
        function hideRMenu() {
            $("#rMenu").hide();
        }
    
        //鼠标右键事件-创建右键菜单
        function zTreeOnRightClick(event, treeId, treeNode) {
            if (!treeNode) {
                zTree.cancelSelectedNode();
                showRMenu("root", event.clientX, event.clientY);
            } else if (treeNode && !treeNode.noR) { //noR属性为true表示禁止右键菜单
                if (treeNode.newrole && event.target.tagName != "a" && $(event.target).parents("a").length == 0) {
                    zTree.cancelSelectedNode();
                    showRMenu("root", event.clientX, event.clientY);
                } else {
                    zTree.selectNode(treeNode);
                    showRMenu("node", event.clientX, event.clientY);
                }
            }
        }

    Js代码  

    1. <p><span style="#fafafa;"><!-- 右键菜单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>

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

    Js代码  

    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层-----------------------

    Java代码  

    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层-----------------------

    Java代码  

    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. }

    ⑤最后查看效果:

时间: 2024-08-25 12:18:23

Jquery-zTree的基本用法的相关文章

JQuery ztree 异步加载实践

本来要做一个文件目录浏览界面,需要遍历所有的文件和目录,很显然一次性读取时很费时费力的一件事情. 因此就需要做异步加载.... 不过网上的几篇帖子还挺坑的!原始参考:JQuery异步加载实例,相对来说这篇博客还算规整! 准备工作 1 JQuery ZTree,下载地址 复制其中的JS和CSS即可,其实没必要引那么多,用什么引什么就可以. 2 需要fastJSON,用来转换JSON对象,下载地址 我下载JAR包后,引入到Eclipse中总是报找不到class错误. 解决办法:把jar包放在WEB-

jquery——zTree, 完美好用的树插件

Demo 这绝对是我见过最完美的tree了,尽管是国产货,但一点不输国外产品,国外的还没有见过这么强的. __________________________________________________________________________________ 以下是简单的使用demo: <!DOCTYPE html> <html> <head> <title>ZTREE DEMO - Standard Data </title> &l

二.jQuery源码解析之构建jQuery之构建函数jQuery的7种用法

一:$(selectorStr[,限制范围]),接受一个选择器(符合jQuery规范的字符串),返回一个jQuery对象;二:$(htmlStr[,文档对象]),$(html[,json对象])传入html字符串,创建一个新的dom元素 三:$(dom元素),$(dom元素集合)将dom元素转换成jQuery对象.四:$(自定义对象)封装普通对象为jQuery对象.五:$(回调函数)绑定ready事件监听函数,当Dom加载完成时执行.六:$(jQuery对象)接受一个jQuery对象,返回一个j

jQuery中attr()方法用法实例

本文实例讲述了jQuery中attr()方法用法.分享给大家供大家参考.具体分析如下: 此方法设置或返回匹配元素的属性值. attr()方法根据参数的不同,功能也不同. 语法结构一: 获取第一个匹配元素指定属性的属性值. 代码如下: $(selector).attr(name) 参数列表: 参数 描述 name 定义要获取其值的属性名称. 实例代码: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="

jQuery中eq()方法用法

这篇文章主要介绍了jQuery中eq()方法用法,实例分析了eq()方法的功能.定义及获取匹配元素集上的相应位置索引元素的使用技巧,需要的朋友可以参考下 本文实例讲述了jQuery中eq()方法用法.分享给大家供大家参考.具体分析如下: 此方法能够获取匹配元素集上的相应位置索引的元素. 匹配元素集上元素的位置索引是从0开始的. 语法结构: 复制代码 代码如下: $(selector).eq(index) 参数列表: 参数 描述 index 定义元素在元素集中的索引,从零开始的.      如果是

jquery.cycle.js简单用法实例

样式: a{text-decoration: none;} *{margin:0; padding:0;} /*容器设置*/ .player { width:216px; height:248px; background:url(http://i2.itc.cn/20120117/2cc0_da8f6c82_c8da_693d_7714_9533a013006a_3.jpg) no-repeat; background-color:#ede1d1; position:relative; padd

jQuery -&gt; end方法的用法

使用HttpClient进行网络处理的基本步骤如下: 1.通过get的方式获取到Response对象. CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://www.baidu.com/"); CloseableHttpResponse response = httpClient.execute(httpGet); 2.获取Response对

AngularJS 利用directive集成JQuery ZTree

前段时间一直在看AngularJS的资料,感觉是个很好的框架,很想有机会尝试用它做点什么. JQuery ZTree是国内非常不错的JQuery插件,功能齐全,文档和API也非常的友好,之前项目上常用此插件. AngularJS功能虽然非常强大,但UI上提供的插件不像JQuery那么多,而且只能通过directive定义扩展的UI插件,虽然国外已经提供了一些基于directive的Tree功能实现,但毕竟不像ZTree那样强大,而且Tree是做项目中很长用的一个基本功能. 因此,花了一点时间做了

bootstrap jQuery Ztree异步载入数据,check选择&amp;amp;可加入、改动、删除节点

效果图: 一.下载zTree插件 地址:http://www.ztree.me 二.html代码 <link href="../Scripts/zTree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" /> <script src="../Scripts/zTree/js/jquery-1.4.4.min.js"></script> <script src

Jquery插件placeholder的用法

闲的蛋疼,演示一下Jquery插件placeholder的用法,借助该插件能够轻松实现HTML5中placeholder特效: 效果图: 实现代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String basePath = request.getScheme()+"://&quo