最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

zTree jQuery 树插件的使用(实例讲解)

来源:懂视网 责编:小采 时间:2020-11-27 22:29:08
文档

zTree jQuery 树插件的使用(实例讲解)

zTree jQuery 树插件的使用(实例讲解):分享说明: 项目需要树状视图形式展示后台返回的数据;并实现点击节点将节点信息添加到右侧的ul中;待后续提交获取使用;选择了能够实现异步加载节点信息的zTree插件,事实也证明这个插件足够强大,能够满足几乎所有需求;刚接触时看了很多人的分享,结合官方api
推荐度:
导读zTree jQuery 树插件的使用(实例讲解):分享说明: 项目需要树状视图形式展示后台返回的数据;并实现点击节点将节点信息添加到右侧的ul中;待后续提交获取使用;选择了能够实现异步加载节点信息的zTree插件,事实也证明这个插件足够强大,能够满足几乎所有需求;刚接触时看了很多人的分享,结合官方api

分享说明:

项目需要树状视图形式展示后台返回的数据;并实现点击节点将节点信息添加到右侧的ul中;待后续提交获取使用;选择了能够实现异步加载节点信息的zTree插件,事实也证明这个插件足够强大,能够满足几乎所有需求;刚接触时看了很多人的分享,结合官方api文档,终于实现了功能,现将我学习的总结也分享出去.

效果介绍;除了zTree默认的效果;使用api增加了一些实用的操作;包括手风琴效果;点击父节点展开效果;点击节点文字关联复选框效果;一级子节点数量展示效果.

外部引入资源

<link rel="stylesheet" href="./zTree_v3-master/css/zTreeStyle/zTreeStyle.css" rel="external nofollow" >
<script type="text/javascript" src="./jquery-1.9.1.js"></script>
<script type="text/javascript" src="./zTree_v3-master/js/jquery.ztree.all.min.js"></script>

html部分代码

<div class="box">
 <ul id="treeDemo" class="ztree"></ul>
 <ul id="ulright">
 <li style="text-align: center;background-color: #ddd;border-bottom: 1px dashed">已选择</li>
 </ul>
 </div>

css代码

ul,li,body{
 margin: 0;
 padding: 0;
 }
 .ztree li span.node_name {
 font-size: 16px;
 }
 .box{
 width: 500px;
 margin:10px auto;
 border:3px solid #ccc;
 padding: 20px;
 border-bottom: none;
 }
 #treeDemo{
 width: 200px;
 display: inline-block;
 background-color: #f1f1f1;
 min-height: 200px;
 }
 #ulright{
 width: 200px;
 margin-left: 50px;
 min-height: 200px;
 border:1px solid #ccc;
 display: inline-block;
 vertical-align: top;
 background-color: #eeeee8;
 }
 #ulright li{
 width: 100%;
 height: 30px;
 list-style: none;
 line-height: 30px;
 margin-bottom: 3px;
 background-color: #00b6ba;
 padding-left: 10px;
 box-sizing: border-box;

 }


 /**/
 .ztree li a.curSelectedNode{
 background-color: transparent;
 border:#00b6ba;
 }
 .ztree li span.node_name{
 font-size: 18px;
 line-height: 18px;
 color: #000;
 }
 .ztree li a{
 padding: 5px;
 vertical-align: middle;
 }
 .ztree li a:hover{
 text-decoration: none;
 }
 .ztree li span.button.chk{
 margin: 9px 3px;
 }

js代码

//递归找到所有节点(非父节点)
function getAllChildrenNodes(treeNode,result){
 if (treeNode.isParent) {
 var childrenNodes = treeNode.children;
 if (childrenNodes) {
 for (var i = 0; i < childrenNodes.length; i++) {
 if(!childrenNodes[i].children){
 result.push(childrenNodes[i].name);
 }
 result = getAllChildrenNodes(childrenNodes[i], result);
 }
 }
 }
 return result;
}
var parames = 3;
//zTree的所有配置
var setting = {
 //zTree 的唯一标识,初始化后,等于 用户定义的 zTree 容器的 id 属性值。
 treeId:"",
 //zTree 容器的 jQuery 对象,主要功能:便于操作,内部参数,不可修改
 treeObj:null,
 //异步请求数据配置;当父节点没有子节点时;点击此父节点会触发请求
 async:{
 //打开此功能
 enable: true,
 url:"./zTreeDemoV9.0SimpleFromV10.0.php",
 type:"post",
 //发送的父级id的字段定义;如修改,遵循格式autoParam: ["id=parentId"]
 autoParam: ["id"],
 //其他需要提交的参数["name","topic","key","ss"]转换后格式为name=topic&key=ss
 otherParam:["json",parames || 1,"test","2"],
 dataType:"json",
 contentType: "application/x-www-form-urlencoded",
 //ajax请求后的数据预处理函数
 dataFilter: function(treeId,parentNode,responseData){
 for(var i=0;i<responseData.length;i++){
 responseData[i] = JSON.parse(responseData[i])
 }
 return responseData;
 }
 },
 //数据配置
 data: {
 simpleData: {
 enable: true,
 idKey: "id", //修改默认的ID为自己的id
 pIdKey: "pid", //修改默认父级ID为自己数据的父级id
 rootPId: 0 //根节点的父节点id
 }
 },
 //视图配置
 view: {
 //是否显示节点前的图标
 showIcon: false,
 //节点上a标签的样式
 fontCss: {
 }
 },
 //选框配置
 check: {
 //启用复选框
 enable: true,
 //chkStyle:"radio"
 //复选框父子级选择联动设置
 chkboxType: { "Y": "ps", "N": "ps" }
 },
 //事件配置
 callback: {
 //点击复选框之前的事件
 beforeCheck:function(treeId, treeNode){//如果节点是父节点,并且勾选时没有子节点,则不允许勾选;针对父节点没有展开,则没有异步加载子节点,此情况禁止点击父节点全选子节点的操作
 if(treeNode.isParent && !treeNode.children){
 return false;
 }
 },
 //回调错误事件
 onAsyncError: function(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown){
 alert("初始化节点数据失败,请稍后重试");
 },
 //回调成功事件
 onAsyncSuccess: function(event, treeId, treeNode, resData){
 var zTree = $.fn.zTree.getZTreeObj("treeDemo");
 console.log("数据加载成功");
 var count = (treeNode.children.length);
 //加载成功后;在节点后面显示此父节点下有几个一级子节点
 $(".ztree").find("a[title="+treeNode.name+"]").find("span[class='node_name']").html(treeNode.name+"<span>("+count+")</span>");
 },
 //父节点展开时的事件
 onExpand: function(event, treeId, treeNode){
 //zTree对象
 var zTree = $.fn.zTree.getZTreeObj("treeDemo");
 //获取点击的id
 var nowId = treeNode.id;
 //获取所有节点
 var allNodes = zTree.getNodes();
 //获取点击节点的层级
 var level = treeNode.level;
 //定义过滤函数;获取节点层级与点击节点层级相同并且为父节点的节点
 function filter(node) {
 return (node.level == treeNode.level && node.isParent);
 }
 //获得点击节点同级的父节点的集合
 var sameLevelNodes = zTree.getNodesByFilter(filter);
 //遍历同级节点集合
 for(var i=0;i<sameLevelNodes.length;i++){
 //将非被点击父节点收起;实现手风琴效果
 if(sameLevelNodes[i].id != nowId){
 zTree.expandNode(sameLevelNodes[i], false, true, true);
 }
 }
 },
 //点击事件
 onClick: function(e, treeId, treeNode, clickFlag) {
 //tree实例
 var zTree = $.fn.zTree.getZTreeObj("treeDemo");
 //点击文字关联复选框
 //如果不是父节点,则关联,或者是父节点,但展开状态位true是,也关联;
 if(!treeNode.isParent || (treeNode.isParent && treeNode.open)){
 zTree.checkNode(treeNode, !treeNode.checked, true);//点击文字关联复选框
 }
 //点击文字展开当前节点
 zTree.expandNode(treeNode, true, true, true);
 // zTree.reAsyncChildNodes(treeNode, "refresh");//强行异步加载(存在子节点也进行加载)
 //手风琴效果;直接调用onExpand
 zTree.setting.callback.onExpand(e, treeId, treeNode);

 //点击节点名称和勾选节点前面的复选框逻辑相同;
 //直接在onClick里面调用onCheck函数;并传入所需参数
 zTree.setting.callback.onCheck(e, treeId, treeNode);
 },
 //点击复选框事件
 onCheck: function(e, treeId, treeNode) {
 //获取右侧ul内所有li标签;用于比较当前选择复选框在右侧是否一斤存在
 var rightLi = $("#ulright").find("li");
 //选中的是底层节点;
 if(!treeNode.isParent){
 //选中状态,加入到右侧
 if(treeNode.checked){
 //遍历右侧li,如果选中的已经存在;return
 for(var i=0;i<rightLi.length;i++){
 if($(rightLi[i]).attr("title") == treeNode.name){
 return;
 }
 }
 // 创建li 追加li
 var addLi = $("<li title="+treeNode.name+"><span></span>");
 addLi.find("span").text(treeNode.name);
 addLi.animate({
 width:"100%",
 height:"30"
 },400)
 addLi.appendTo($("#ulright"));
 //如果点击的节点存在connect字段;判断复选框状态加入到右侧ul或删除
 if(treeNode.connect){
 //遍历右侧li,如果选中的已经存在;return
 for(var i=0;i<rightLi.length;i++){
 if($(rightLi[i]).attr("title") == treeNode.connect){
 return;
 }
 }
 // 创建li 追加li
 var addLi = $("<li title="+treeNode.connect+"><span></span>");
 addLi.find("span").text(treeNode.connect);
 addLi.animate({
 width:"100%",
 height:"30"
 },400)
 addLi.appendTo($("#ulright"));
 }
 //将被勾选的节点背景颜色更改
 $("#treeDemo").find("a[title="+treeNode.name+"]").css("backgroundColor","#00b6ba");
 //非选中状态,删除
 }else{
 //将右侧的次节点对应的li删除
 $("#ulright").find("li[title="+treeNode.name+"]").animate({
 width:"0%",
 height:"0"
 },400,function(){
 $("#ulright").find("li[title="+treeNode.name+"]").remove();
 })
 //取消此节点的背景颜色
 $("#treeDemo").find("a[title="+treeNode.name+"]").css("backgroundColor","");
 }
 //选中的是父节点;获取所有子节点(非父节点),判断复选框状态加入到右侧ul或删除
 }else{
 //调用递归函数;获取所有非父级子节点数组集合
 var addNodesArray = getAllChildrenNodes(treeNode,[]);
 //是选中状态,加入到右侧ul
 if(treeNode.checked){
 //定义存储右侧li的数组
 var rightLiArray = [];
 $("#ulright li").each(function(i,v){
 rightLiArray.push($(v).attr("title"))
 })
 rightLiArray = rightLiArray.slice(1);
 //遍历勾选的数组集合
 for(var i=0;i<addNodesArray.length;i++){
 //判断此节点是否在右侧ul内;不存在则加入
 if(rightLiArray.indexOf(addNodesArray[i]) == -1){
 //创建li 追加li
 var addLi = $("<li title="+addNodesArray[i]+"><span>"+addNodesArray[i]+"</span>");
 addLi.animate({
 width:"100%",
 height:30
 },400)
 addLi.appendTo($("#ulright"));
 }
 //将节点背景颜色修改
 $("#treeDemo").find("a[title="+addNodesArray[i]+"]").css("backgroundColor","#00b6ba");
 }
 //是非选中状态,删除
 }else{
 //遍历节点,执行删除操作
 for(var i=0;i<addNodesArray.length;i++){
 $("#ulright").find("li[title="+addNodesArray[i]+"]").animate({
 width:"0%",
 height:0
 },function(){
 $(this).css("display","none");
 $(this).remove();
 })
 //还原背景颜色
 $("#treeDemo").find("a[title="+addNodesArray[i]+"]").css("backgroundColor","");
 }
 }
 }
 },
 }

};
//zTree的节点信息;可一次性全部加载;可试试异步请求
var zNodes = [{
 name: "数据表",//名称
 id: 4,//id,子元素的pid
 isParent:true,//是否为父节点,默认为false
 pid:0//父节点id;data中的rootPId;
 },{
 name: "测试表",
 id: 1,
 isParent:true,
 pid:0
 },{
 name: "信息表",
 id: 2,
 isParent:true,
 pid:0
 },{
 name: "作废表",
 id: 3,
 isParent:true,
 pid:0
 }];
$(document).ready(function() {
 //初始化zTree; zTree容器的jquery对象/ 配置/ 节点
 $.fn.zTree.init($("#treeDemo"), setting, zNodes);
});

后台php代码;本人纯前端,后台代码只会简单的写写;

<?php

$pId = $_POST['id'];

if($pId == 4){
 $array = array('{"name":"数据表_一","id":"1_1","pid":"0"}','{"name":"数据表_二","id":"1_2","pid":"0"}','{"name":"数据表_三","id":"1_3","pid":"0"}','{"name":"数据表_四","id":"1_4","pid":"0"}','{"name":"数据表_五","id":"1_5","pid":"0"}');
}else if($pId == 1){
 $array = array('{"name":"测试表_一","id":"2_1","pid":"1"}','{"name":"测试表_二","connect":"测试表_一","id":"2_2","pid":"1"}','{"name":"测试表_三","id":"2_3","pid":"1"}','{"name":"测试表_四","id":"2_4","pid":"1"}','{"name":"测试表_五","id":"2_5","pid":"1"}');
}else if($pId == 2){
 $array = array('{"name":"信息表_一","id":"3_1","pid":"3"}','{"name":"信息表_二","id":"3_2","pid":"3"}','{"name":"信息表_三","id":"3_3","pid":"3"}','{"name":"信息表_四","id":"3_4","pid":"3"}','{"name":"信息表_五","id":"3_5","pid":"3"}','{"name":"信息表_五_一","id":"3_5_1","pid":"3_5"}','{"name":"信息表_五_二","id":"3_5_2","pid":"3_5"}','{"name":"信息表_三_一","id":"3_3_1","pid":"3_3"}','{"name":"信息表_三_二","id":"3_3_2","pid":"3_3"}','{"name":"信息表_三_三","id":"3_3_3","pid":"3_3"}');
}else if($pId == 3){
 $array = array('{"name":"作废表_一","id":"4_1","pid":"3"}','{"name":"作废表_二","id":"4_2","pid":"3"}','{"name":"作废表_三","id":"4_3","pid":"3"}');
}

echo json_encode($array);

js代码大部分都有注释;详细api可在zTree官网查看 进入官方api文档 代码运行需在服务器环境下运行;

最终栗子效果图

以上这篇zTree jQuery 树插件的使用(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

文档

zTree jQuery 树插件的使用(实例讲解)

zTree jQuery 树插件的使用(实例讲解):分享说明: 项目需要树状视图形式展示后台返回的数据;并实现点击节点将节点信息添加到右侧的ul中;待后续提交获取使用;选择了能够实现异步加载节点信息的zTree插件,事实也证明这个插件足够强大,能够满足几乎所有需求;刚接触时看了很多人的分享,结合官方api
推荐度:
标签: 使用 详解 实例
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top