ztree简介_动力节点Java学院整理

【简介】

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

zTree是一个依靠jQuery实现的多功能“树插件”。优异的性能、灵活的配置、多种功能的组合是zTree最大优点。

官方文档:http://www.treejs.cn/v3/main.php#_zTreeInfo

   兼容 IE、FireFox、Chrome 等浏览器

   在一个页面内可同时生成多个 Tree 实例

   支持 JSON 数据

   支持一次性静态生成 和 Ajax 异步加载 两种方式

   支持多种事件响应及反馈

   支持 Tree 的节点移动、编辑、删除

   支持任意更换皮肤 / 个性化图标(依靠css)

   支持极其灵活的 checkbox 或 radio 选择功能

   简单的参数配置实现 灵活多变的功能

 【部分函数和属性介绍】

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

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

  核心参数:setting

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

setting 举例:

Js代码

var setting = {
 showLine: true,
 checkable: true
}; 

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

  核心参数:zTreeNodes

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

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

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

Js代码

var zTreeNodes = [
 {"id":1, "name":"test1", "nodes":[
 {"id":11, "name":"test11", "nodes":[
 {"id":111, "name":"test111"}
 ]},
 {"id":12, "name":"test12"}
 ]},
 ......
]; 

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

Js代码

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

【实例一】(Java代码)

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

Html代码

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

②在script脚本中定义setting和zTreeNodes

Java代码

var setting = {
 isSimpleData : true,  //数据是否采用简单 Array 格式,默认false
 treeNodeKey : "id",  //在isSimpleData格式下,当前节点id属性
 treeNodeParentKey : "pId", //在isSimpleData格式下,当前节点的父节点id属性
 showLine : true,   //是否显示节点间的连线
 checkable : true   //每个节点上是否显示 CheckBox
 }; 

var treeNodes = [
 {"id":1, "pId":0, "name":"test1"},
 {"id":11, "pId":1, "name":"test11"},
 {"id":12, "pId":1, "name":"test12"},
 {"id":111, "pId":11, "name":"test111"},
]; 

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

Js代码

var zTree; 

Js代码

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

④最后查看效果:

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

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

Java代码

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

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

Js代码

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:

Js代码

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 //右键事件
 }
 }; 

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

Js代码

//显示右键菜单
 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代码

<p><span style="background-color: #fafafa;"><!-- 右键菜单div -->
 <div id="rMenu" style="position:absolute; display:none;">
 <li>
 <ul id="m_add" onclick="addPrivilege();"><li>增加</li></ul>
 <ul id="m_del" onclick="delPrivilege();"><li>删除</li></ul>
 <ul id="m_del" onclick="editPrivilege();"><li>编辑</li></ul>
 <ul id="m_del" onclick="queryPrivilege();"><li>查看</li></ul>
 </li>
 </div></span></p> 

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

Js代码

function reloadTree() {
 hideRMenu();
 zTree = $("#tree").zTree(setting, treeNodes);
 } 

 var zTree;
 var treeNodes = []; 

$(function() {
 reloadTree(); 

 $("body").bind(//鼠标点击事件不在节点上时隐藏右键菜单
  "mousedown",
  function(event) {
   if (!(event.target.id == "rMenu" || $(event.target)
    .parents("#rMenu").length > 0)) {
   $("#rMenu").hide();
   }
  });
 }); 

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

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

Java代码

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

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

Java代码

/**
 * 根据节点id,查询其下级节点的数据
 */
 @SuppressWarnings("unchecked")
 @Override
 public List<Privilege> findPrivilegeTreeById(int treeId) {
 StringBuffer sbTree= new StringBuffer();
 sbTree.append("SELECT NEW Privilege(p.id,p.privName,p.description,p.status,p.isLeaf,p.parentId) FROM Privilege p ");
 sbTree.append("WHERE p.parentId=:treeId ");
 sbTree.append("AND p.status!=:del "); 

 Map<String,Object> mapTree = new HashMap<String, Object>();
 mapTree.put("treeId", treeId);
 mapTree.put("del", Privilege.PRIV_STATUS_DELETE); 

 return (List<Privilege>) privilegeDao.findByHql(sbTree.toString(), mapTree);
 } 

⑤最后查看效果:

(0)

相关推荐

  • jQuery树形控件zTree使用小结

    0 zTree简介 树形控件的使用是应用开发过程中必不可少的.zTree 是一个依靠 jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 0.0 zTree的特点  •最新版的zTree将核心代码按照功能进行了分割,不需要的代码可以不用加载,如普通使用只需要加载核心的jquery.ztree.core-3.5.js,需要使用勾选功能加载jquery.ztree.excheck-3.5.min.js,需要使用编辑功能加载jquery.

  • jQuery使用zTree插件实现树形菜单和异步加载

    本文实例讲解了jQuery使用zTree插件实现树形菜单和异步加载,并且可以进行编辑,分享给大家供大家参考,具体内容如下 效果图: 一.HTML代码 <html> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <l

  • 在AngularJS中使用jQuery的zTree插件的方法

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

  • jQuery ztree实现动态树形多选菜单

    我用到的版本ztree core v3.5.24,需要引入的js,css,jquery.js,jquery.ztree.core.js,jquery.ztree.excheck.js(多选框可选),zTreeStyle.css. 需要注意的指向父节点的pId,我开始写的是pid一开始没注意,默认的是pId,当然可以pIdKey指定自定义的(未测).还有如果图片没显示肯定是没引入img图片,记得写好路径. 1.先介绍初始化加载ztree jsp <div > <ul id="tr

  • Jquery zTree 树控件异步加载操作

    zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 支持 JSON 数据 支持一次性静态生成 和 Ajax 异步加载 两种方式 支持多种事件响应及反馈 支持 Tree 的节点移动.编辑.删除 支持任意更换皮肤 / 个性化图标(依靠css) 支持极其灵活的 checkbox 或 radio 选择功能 简单的参数配置实现 灵活多变的功能 异步加载的意思就是: 当点

  • jquery zTree异步加载、模糊搜索简单实例分享

    本文实例为大家讲解了jquery zTree树插件的基本使用方法,具体内容如下 一.节点模糊搜索功能:搜索成功后,自动高亮显示并定位.展开搜索到的节点. 二.节点异步加载:1.点击展开时加载数据:2.选中节点时加载数据. 前台代码如下: <script type="text/javascript"> //ztree设置 var setting = { view: { fontCss: getFontCss }, check: { enable: true }, data:

  • jQuery zTree加载树形菜单功能

    由于项目中需要设计树形菜单功能,于是百度找相关资料,发现zTree方面的资料不少,觉得挺不错,而且zTree官方也有API文档,介绍的非常详细,经过一番捣腾之后,终于给弄出来了,所以便记下来,也算是学习zTree的一个总结吧. zTree的介绍: 1.zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 2.zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 3.采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本

  • ztree简介_动力节点Java学院整理

    [简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 zTree是一个依靠jQuery实现的多功能"树插件".优异的性能.灵活的配置.多种功能的组合是zTree最大优点. 官方文档:http://www.treejs.cn/v3/main.php#_zTreeInfo    兼容 IE.FireFox.Chrome 等浏览器    在一个页面内可同时生成多个 Tree 实例    支持 JSON 数据    支持一次性静态生成

  • Nginx简介_动力节点Java学院整理

    1.什么是Nginx Nginx来自俄罗斯的Igor Sysoev在为Rambler Media(http://www.rambler.ru/)工作期间,使用C语言开发了Nginx.Nginx作为Web服务器,一直为俄罗斯著名的门户网站Rambler Media提供着出色.稳定的服务. Igor Sysoev将Nginx的代码开源,并且赋予其最自由的2-clause BSD-like license许可证.由于Nginx使用基于事件驱动的架构能够并发处理百万级别的TCP连接,高度模块化的设计和自

  • Java Map简介_动力节点Java学院整理

    Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collection 视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序.某些映射实现可明确保证其顺序,如 TreeMap 类:另一些映射实现则不保证顺序,如HashMap 类. 注:将可变对象用作映射键时必须格外小心.当对

  • Java中Object toString方法简介_动力节点Java学院整理

    一.Object类介绍  Object类在Java里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object.所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗.所有的类,不管是谁,都是从它继承下来的. 二.toString方法介绍  一个字符串和另外一种类型连接

  • Java Set简介_动力节点Java学院整理

    1. 概述   Java 中的Set和正好和数学上直观的集(set)的概念是相同的.Set最大的特性就是不允许在其中存放的元素是重复的.根据这个特点,我们就可以使用Set 这个接口来实现前面提到的关于商品种类的存储需求.Set 可以被用来过滤在其他集合中存放的元素,从而得到一个没有包含重复新的集合. 2. 常用方法 按照定义,Set 接口继承 Collection 接口,而且它不允许集合中存在重复项.所有原始方法都是现成的,没有引入新方法.具体的 Set 实现类依赖添加的对象的 equals()

  • RandomAccessFile简介_动力节点Java学院整理

    RandomAccessFile RandomAccessFile 是随机访问文件(包括读/写)的类.它支持对文件随机访问的读取和写入,即我们可以从指定的位置读取/写入文件数据. 需要注意的是,RandomAccessFile 虽然属于java.io包,但它不是InputStream或者OutputStream的子类:它也不同于FileInputStream和FileOutputStream. FileInputStream 只能对文件进行读操作,而FileOutputStream 只能对文件进

  • Java字符编码简介_动力节点Java学院整理

    1. 概述 本文主要包括以下几个方面:编码基本知识,Java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687".注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示". 2. 编码基本知识 最早的编码是iso88

  • Java7之forkjoin简介_动力节点Java学院整理

    Java7引入了Fork Join的概念,来更好的支持并行运算.顾名思义,Fork Join类似与流程语言的分支,合并的概念.也就是说Java7 SE原生支持了在一个主线程中开辟多个分支线程,并且根据分支线程的逻辑来等待(或者不等待)汇集,当然你也可以fork的某一个分支线程中再开辟Fork Join,这也就可以实现Fork Join的嵌套. 有两个核心类ForkJoinPool和ForkJoinTask. ForkJoinPool实现了ExecutorService接口,起到线程池的作用.所以

  • Java List简介_动力节点Java学院整理

    Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解.  List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引  ArrayList:底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)(特点是查询很快,但增删较慢)线程不同步  LinkedList:底层的数据结构是链表结构(特点是查询较慢,增删较快)  Vector:底层是数组数据结构 线

  • jQuery Autocomplete简介_动力节点Java学院整理

    jQuery UI Autocomplete是jQuery UI的自动完成组件,是我用过的最强大.最灵活的Autocomplete,它支持本地的Array/JSON数组.通过ajax请求的Array/JSON数组.JSONP.以及Function(最灵活)等方式来获取数据. 支持的数据源 jQuery UI Autocomplete主要支持字符串Array.JSON两种数据格式. 普通的Array格式没有什么特殊的,如下: ["bjpowernode","动力节点"

随机推荐