一、引入资源
下载并引入ztree的相关js,css和img等。http://www.treejs.cn/v3/api.php

ztree的核心代码jquery.ztree.core.js
ztree关于选中的代码jquery.ztree.excheck.js(如果有复选框引入)
ztree关于是否可编辑的代码jquery.exedit.js(允许修改节点时引入)

二、初始化ztree
1、页面中创建tree需要显示的载体dom
2、设置ztree的基本配置参数 setting

 // zTree 的参数配置,深入使用请参考 API 文档(setting 配置详解)
var setting = {
//是否允许编辑节点
edit: {
enable: true,
editNameSelectAll: true,
showRemoveBtn: true,
removeTitle: "删除节点",
showRenameBtn: true,
renameTitle: "编辑节点"
},
data: {
simpleData: {
enable: true
}
},
callback: {
beforeRemove: beforeRemove, //移除前
beforeRename: beforeRename, //重命名前
//onRemove: onRemove,
onRename: onRename,
beforeDrag:beforeDrag,
onClick: zTreeOnClick //注册节点的点击事件
},
view: {
selectedMulti: false,
addHoverDom: addHoverDom, //移入节点显示编辑按钮
removeHoverDom: removeHoverDom //移入节点显示编辑按钮
},
};

3、获取节点初始数据,并初始化ztree
ztree支持的数据结构,可查看官网文档。

  //获取部门tree数据
function loadTree() {
$.ajax({
type: 'POST',
contentType: '',
url: "",
data: {},
timeout: 1000, //超时时间设置,单位毫秒
dataType: 'json',
success: function (res) {
zNodes = []; //初始化ztree
for (var i = 0; i < res.length; i++) {
var data = res[i]
zNodes.push({
'id': data.id,
'pId': data.pId,
'name': data.name,
'open': false
});
}
zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, zNodes); //初始化ztree
}
}) } $(document).ready(function () {
loadTree()
});

三、配置增删改方法

添加:

在节点下添加新节点信息
1、首先在setting的callback中,设置addHoverDom方法,鼠标移入节点时,显示编辑按钮;在setting的edit中也需要设置显示编辑按钮。
2、

 //鼠标移入节点,显示编辑按钮
function addHoverDom(treeId, treeNode) { //treeNode是当前hover的节点信息
var sObj = $("#" + treeNode.tId + "_span");
if (treeNode.editNameFlag || $("#addBtn_" + treeNode.tId).length > 0) return;
var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
+ "' title='添加节点' οnfοcus='this.blur();'></span>";
sObj.after(addStr);
var btn = $("#addBtn_" + treeNode.tId); //判断该部门下是否有人员,用于删除节点时,当节点下有信息,禁止删除。
var data1 = {
"id": treeNode.id,
"pageNumber": currentPageNumber,
"pageSize": currentPageSize
};
$.ajax({
type: 'POST',
url: "",
data: data1,
timeout: 1000, //超时时间设置,单位毫秒
dataType: 'json',
success: function (res) {
//console.log(res);
if(res.flag == 0){
var datalist = res.data.list;
if(datalist.length==0){
hasMember = false;
}else{
hasMember = true;
}
} }
});
//当点击添加按钮时:
if (btn) btn.bind("click", function () {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
console.log(treeNode.id);
var name = "新部门" + (newCount++);
var newNode;
//发送请求保存一个新建的节点,后台返回ID,用返回的ID新增节点
var data = {
"code": treeNode.id,
"name": name
};
$.ajax({
type: 'post',
url: "",
data: data,
timeout: 1000, //超时时间设置,单位毫秒
dataType: 'json',
success: function (res) {
console.log(res)
if (res.flag == 0 ) {
var newId = res.data;
//在树节点上增加节点
newNode = zTree.addNodes(treeNode, {id: newId, pId: treeNode.id, name: name});
zTree.editName(newNode[0]) //新增的节点进入编辑状态
}
}
});
return false;
});
}

添加新的根节点
流程与上述方法类似,只是在树节点之外增加一个新增根节点按钮,并添加上对应的方法

 //添加根节点
$('.addnode').click(function () {
var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
nodes = zTree.getNodes();
console.log(nodes) var name = "新部门" + (newCount++);
var newNode;
//发送请求保存一个新建的节点,根据返回ID添加新节点
var data = {
"code": 0,
"name": name
};
$.ajax({
type: 'post',
url: "",
data: data,
timeout: 1000, //超时时间设置,单位毫秒
dataType: 'json',
success: function (res) {
console.log(res)
if (res.flag == 0) {
var newId = res.data;
newNode = zTree.addNodes(null, {id: newId, pId: null, name: name});
zTree.editName(newNode[0]); //新增后显示编辑状态
}
}
});
});

修改

重命名修改
1、重命名之前的判空,在beforeRename函数中判断

 //重命名之前的判断
function beforeRename(treeId, treeNode, newName) {
if (newName.length == 0) {
layer.msg("节点名称不能为空.");
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
setTimeout(function () {
zTree.editName(treeNode)
}, 10);
return false;
}
return true;
}

2、重命名的前后台交互

 //修改节点信息
function onRename(event, treeId, treeNode, isCancel) {
if (isCancel) {
return;
}
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
var onodes = zTree.getNodes()
console.log(onodes);
//发送请求修改节点信息
var data = {
"id": treeNode.id,
"code": treeNode.pId, //父节点
"name": treeNode.name,
};
$.ajax({
type: 'post',
url: "",
data: data,
timeout: 1000, //超时时间设置,单位毫秒
dataType: 'json',
success: function (res) {
layer.msg(res.msg)
}
});
}

删除

需求:
删除前需要二次确认;
当节点下有子节点时,禁止删除改节点;
当节点下有对应的其他信息时,禁止删除;

 //删除之前的判断
function beforeRemove(treeId, treeNode) {
var data = {
"id": treeNode.id
};
className = (className === "dark" ? "" : "dark"); if(treeNode.isParent){
layer.alert('该节点下有子节点,不能删除');
return false;
} if(hasMember){
layer.alert('该部门下有人员,不能删除');
return false;
}
var oFlag = confirm("确认删除 节点 -- " + treeNode.name + " 吗?");
if(oFlag){
$.ajax({
type: 'post',
url: "",
data: data,
timeout: 1000, //超时时间设置,单位毫秒
dataType: 'json',
success: function (res) {
console.log(res)
if (res.flag == 0) {
layer.msg(res.msg)
return true;
}else {
layer.msg(res.msg);
return false;
}
}
})
}else{
return false
}
}

其他

鼠标移出时,隐藏编辑按钮

 function removeHoverDom(treeId, treeNode) {
$("#addBtn_" + treeNode.tId).unbind().remove();
};

禁止节点之前的拖拽

 function beforeDrag(){
return false; //禁止所有拖拽功能
}

点击节点的事件

 //当点击节点
function zTreeOnClick(event, treeId, treeNode) {
//alert(treeNode.tId + ", " + treeNode.name);
//这里根据节点ID获取对应信息或进行对应的操作
}

ztree的添加、修改、删除及前后台交互的更多相关文章

  1. JavaWeb_day03_员工信息添加修改删除

    day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...

  2. Web 1三级联动 下拉框 2添加修改删除 弹框

    Web  三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  3. 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

    第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...

  4. SpringBoot定时任务升级篇(动态添加修改删除定时任务)

    需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...

  5. 【转】C#添加修改删除文件文件夹大全

    [转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...

  6. oracle 表字段添加 修改 删除语法

    修改列名 alter table 表明 rename column rename 老列名 to 新列名添加 字段alter table 表名 add(字段名 类型):删除字段alter table 表 ...

  7. EF简单的添加修改删除基本语法

    using ( androidhiveEntities db = new androidhiveEntities() )                {                    #re ...

  8. thinkphp 添加 修改删除

    在 MainController.class.php 添加 public function zhuCe() { //时间两个逻辑 // 1 显示页面 2向数据库添加 if(empty($_POST)) ...

  9. MySQL 字段常用操作 添加,修改,删除,调整字段顺序

    整理备忘: 添加字段:alter table 表名Add column 字段名 字段类型  默认值 AFTER 字段名 (在哪个字段后面添加) 例子: alter table appstore_sou ...

随机推荐

  1. haproxy 配置文件详解 之 综述

    HAProxy 配置文件根据功能和用途,主要有5 个部分组成,但有些部分并不是必须的,可以根据需要选择相应的部分进行配置. 1.global 部分 用来设定全局配置参数,属于进程级的配置,通常和操作系 ...

  2. winform自定义分页控件

    1.控件代码: public partial class PagerControl : UserControl { #region 构造函数 public PagerControl() { Initi ...

  3. 一道经典的Java面试题:equals ,== 和hashcode()的区别

    一句话区别:==比较的是内存地址,equals比较的是值内容 结论: 从以下三点展开: 基本数据类型.字符串.对象 对于基本数据类型:只有==,没有equals. 对于字符串:==比较的是内存地址,e ...

  4. VS2019调试 asp.net core 2.2 出现《ANCM In-Process Handler Load Failure 发布后启动错误处理》处理

      从 google 出来的 github 上  AspNetCore issues 和 stackoverflow 搜到的,百度 博客园搜到的,CSDN 搜到的,统统设置了,不管用.   从这些问题 ...

  5. 【原】无脑操作:Markdown可以这样玩

    一.背景: Markdown是一种纯文本格式的标记语言.通过简单的标记语法,可以使普通文本内容具有一定的格式.因为语法简单明了.功能又比纯文本强大,所以很适合作为开发人员的书写工具.Markdown的 ...

  6. cad.net GeometricExtents出错了 调试看不到文字

     飞诗: 难道块不能取GeometricExtents   GeometryExtentsBestFit 用这个解决    GeometryExtentsBestFit 对动态块也不准   com方式 ...

  7. CloseableHttpClient方式配置代理服务器访问外网

    小编最近在负责银行内部项目.其中有模块需要访问天眼查API接口,但由于公司全部内网,所以需要配置代理服务器才可以访问外网接口. 又到了激动人心的上码时刻! public void Connect(Ht ...

  8. Range Sum Query - Mutable 精简无递归线段树

    操作: 单点更新,区间求和 区间求和:如sum [3,10) 需要对19,5,12,26节点求和即可. 观察可知,左端点为右子节点(奇数)时直接相加,右端点为左子节点(偶数)时直接相加,两边向中间移动 ...

  9. Springboot Actuator之十:actuator中的audit包

    前言这篇文章我们来分析一下org.springframework.boot.actuate.security,org.springframework.boot.actuate.audit中的代码,这2 ...

  10. 《PHP7底层设计与源码实现》学习笔记1——PHP7的新特性和源码结构

    <PHP7底层设计与源码实现>一书的作者陈雷亲自给我们授课,大佬现身!但也因此深感自己基础薄弱,遂买了此书.希望看完这本书后,能让我对PHP7底层的认识更上一层楼.好了,言归正传,本书共1 ...