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


Posted in Javascript onJuly 19, 2017

【简介】

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); 
 });

④最后查看效果:

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

【实例二】(从后台获取简单格式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); 
});

 ③最后显示效果

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

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

①配置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); 
 }

 ⑤最后查看效果:

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

Javascript 相关文章推荐
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
基于jQuery制作迷你背词汇工具
Jul 27 Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
js中数组Array的一些常用方法总结
Aug 12 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
Mar 05 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
javascript中setTimeout使用指南
Jul 26 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 Javascript
vue基于Vue2.0和高德地图的地图组件实例
Apr 28 Javascript
Angular实现双向折叠列表组件的示例代码
Nov 21 Javascript
Angular 1.x个人使用的经验小结
Jul 19 #Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 #Javascript
vue loadmore组件上拉加载更多功能示例代码
Jul 19 #Javascript
vue引入swiper插件的使用实例
Jul 19 #Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 #Javascript
JS实现的走迷宫小游戏完整实例
Jul 19 #Javascript
JS设置随机出现2个数字的实例代码
Jul 19 #Javascript
You might like
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
php图像生成函数之间的区别分析
2012/12/06 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
Python自动连接ssh的方法
2015/03/07 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
python tkinter组件摆放方式详解
2019/09/16 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
什么是View State?
2013/01/27 面试题
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
文明寝室申报材料
2014/05/12 职场文书
个人德育工作总结
2015/03/05 职场文书
放假通知范文
2015/04/14 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
Nginx进程调度问题详解
2021/09/25 Servers