jQuery zTree加载树形菜单功能


Posted in Javascript onFebruary 25, 2016

由于项目中需要设计树形菜单功能,于是百度找相关资料,发现zTree方面的资料不少,觉得挺不错,而且zTree官方也有API文档,介绍的非常详细,经过一番捣腾之后,终于给弄出来了,所以便记下来,也算是学习zTree的一个总结吧。

zTree的介绍:

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

2、zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载

3、采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀

4、兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器

5、支持 JSON 数据

6、支持静态 和 Ajax 异步加载节点数据

7、支持任意更换皮肤 / 自定义图标(依靠css)

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

9、提供多种事件响应回调

10、灵活的编辑(增/删/改/查)功能,可随意拖拽节点,还可以多节点拖拽哟

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

核心的函数和属性介绍:

核心:zTree(setting, [zTreeNodes])

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

核心参数:setting

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

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

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

核心参数:zTreeNodes

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

1、zTree官方网站: http://www.ztree.me/v3/main.php#_zTreeInfo

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

关于zTree的节点数据的获取方式分为静态(直接定义)的和动态(后台数据库加载)的

具体的配置步骤:

第一步 —— 引入相关文件

<link rel="stylesheet" href="ztree/css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="js/jQuery/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="ztree/js/jquery.ztree.core-3.5.min.js"></script>
<script type="text/javascript" src="ztree/js/jquery.ztree.excheck-3.5.min.js"></script>

备注:

1)、第一个(zTreeStyle.css)是zTree的样式css文件,引入了这个,才能呈现出树形的结构样式,

2)、第二个(jquery-1.9.1.min.js)是jQuery文件,因为要用到,

3)、第三个(jquery.ztree.core-3.5.min.js)则是zTree的核心js文件,这个是必须的,

4)、最后一个(js/jquery.ztree.excheck-3.5.min.js)则是拓展文件,主要用于单选框和复选框的功能,因为用到了复选框,所以也要要引进来。

第二步 —— 相关配置(具体的详细配置,请到官网参考详细API文档)

var zTree;
var setting = {
 view: {
 dblClickExpand: false,//双击节点时,是否自动展开父节点的标识
 showLine: true,//是否显示节点之间的连线
 fontCss:{'color':'black','font-weight':'bold'},//字体样式函数
 selectedMulti: false //设置是否允许同时选中多个节点
 },
 check:{
 //chkboxType: { "Y": "ps", "N": "ps" },
 chkStyle: "checkbox",//复选框类型
 enable: true //每个节点上是否显示 CheckBox 
 },
 data: {
 simpleData: {//简单数据模式
  enable:true,
  idKey: "id",
  pIdKey: "pId",
  rootPId: ""
 }
 },
 callback: {
 beforeClick: function(treeId, treeNode) {
  zTree = $.fn.zTree.getZTreeObj("user_tree");
  if (treeNode.isParent) {
  zTree.expandNode(treeNode);//如果是父节点,则展开该节点
  }else{
  zTree.checkNode(treeNode, !treeNode.checked, true, true);//单击勾选,再次单击取消勾选
  }
 }
 }
};

第三步 —— 节点数据加载,呈现树形结构

1)、html页面,直接放一个ul就可以,数据最终会自动加载到这个ul元素里面

<body>
 <div class="zTreeDemoBackground left">
 <ul id="user_tree" class="ztree" style="border: 1px solid #617775;overflow-y: scroll;height: 500px;"></ul>
 </div>
</body>

2)、js中进行数据的加载

一、静态方式(直接定义)

var zNodes =[
 { id:1, pId:0, name:"test 1", open:false},
 { id:11, pId:1, name:"test 1-1", open:true},
 { id:111, pId:11, name:"test 1-1-1"},
 { id:112, pId:11, name:"test 1-1-2"},
 { id:12, pId:1, name:"test 1-2", open:true},
   ];
   
$(document).ready(function(){
 $.fn.zTree.init($("#user_tree"), setting, zNodes);
});
function onCheck(e,treeId,treeNode){
 var treeObj=$.fn.zTree.getZTreeObj("user_tree"),
 nodes=treeObj.getCheckedNodes(true),
 v="";
 for(var i=0;i<nodes.length;i++){
 v+=nodes[i].name + ",";
 alert(nodes[i].id); //获取选中节点的值
 }
}

二、动态方式(从后台数据库加载)

/**
 * 页面初始化
 */
$(document).ready(function(){
 onLoadZTree();
});

/**
 * 加载树形结构数据
 */
function onLoadZTree(){
 var treeNodes;
 $.ajax({
 async:false,//是否异步
 cache:false,//是否使用缓存
 type:'POST',//请求方式:post
 dataType:'json',//数据传输格式:json
 url:$('#ctx').val()+"SendNoticeMsgServlet?action=loadUserTree",//请求的action路径
 error:function(){
  //请求失败处理函数
  alert('亲,请求失败!');
 },
 success:function(data){
// console.log(data);
  //请求成功后处理函数
  treeNodes = data;//把后台封装好的简单Json格式赋给treeNodes
 }
 });
 
 var t = $("#user_tree");
 t = $.fn.zTree.init(t, setting, treeNodes);
}

java后台加载数据代码:

1、定义tree的VO类,这个也可以不用定义,由于我要用到其他操作,方便一些

/**
 * zTree树形结构对象VO类
 * 
 * @author Administrator
 * 
 */
public class TreeVO {
 private String id;//节点id
 private String pId;//父节点pId I必须大写
 private String name;//节点名称
 private String open = "false";//是否展开树节点,默认不展开

 public String getId() {
 return id;
 }

 public void setId(String id) {
 this.id = id;
 }

 public String getpId() {
 return pId;
 }

 public void setpId(String pId) {
 this.pId = pId;
 }

 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }

 public String getOpen() {
 return open;
 }

 public void setOpen(String open) {
 this.open = open;
 }

}

2、查询数据库,并且sql的结构字段也要是id,pId,name,open(可选)这种格式(注意:pId中间的I必须大写),然后将结果封装到TreeVO类中。

/**
 * 加载树形结构数据
 * @param request
 * @param response
 * @throws IOException 
 */
 public void loadUserTree(HttpServletRequest request, HttpServletResponse response) throws IOException{
 WeiXinUserService weixinUserService = new WeiXinUserServiceImpl();
 List<TreeVO> user_tree_list = weixinUserService.getUserTreeList();
 String treeNodesJson = JSONArray.fromObject(user_tree_list).toString();//将list列表转换成json格式 返回
 
 PrintWriter out = response.getWriter();
 //利用Json插件将Array转换成Json格式 
 out.print(treeNodesJson);
 
 //释放资源
 out.close();
 }

更多关于ztree控件的内容,请参考专题《jQuery插件ztree使用汇总》

这里就完成了整个操作了,?,文笔不好,组织语言自然就不怎么样了,大家见谅!共同学习,共同成长!

Javascript 相关文章推荐
详解new function(){}和function(){}() 区别分析
Mar 22 Javascript
javascript 延迟加载技术(lazyload)简单实现
Jan 17 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
Nov 18 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
jQuery Easyui快速入门教程
Aug 21 Javascript
jquery做个日期选择适用于手机端示例
Jan 10 Javascript
浅谈express 中间件机制及实现原理
Aug 31 Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 Javascript
Angular-UI Bootstrap组件实现警报功能
Jul 16 Javascript
JavaScript箭头函数中的this详解
Jun 19 Javascript
Node.js path模块,获取文件后缀名操作
Nov 07 Javascript
Ajax是什么?Ajax高级用法之Axios技术
Apr 21 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 #Javascript
jquery插件之文字间歇自动向上滚动效果代码
Feb 25 #Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 #Javascript
利用jQuery中的ajax分页实现代码
Feb 25 #Javascript
Jquery zTree 树控件异步加载操作
Feb 25 #Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
Feb 25 #Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 #Javascript
You might like
php过滤危险html代码
2008/08/18 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
php对数组排序代码分享
2014/02/24 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
JS继承用法实例分析
2015/02/05 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
DataFrame中去除指定列为空的行方法
2018/04/08 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
python help函数实例用法
2020/12/06 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
四风问题自查自纠工作情况报告
2014/10/28 职场文书
文员岗位职责范本
2015/04/16 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript