一、引入资源
下载并引入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. vb.net 读取 excel

    Dim myConn AsNew ADODB.Connection myConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient '   用 ...

  2. git手册查询

    1.创建版本库 通过git init命令把此目录变成Git可以管理的仓库; 添加文件到Git仓库,分两步 第一步:git add <file>,注意,可反复多次使用,添加多个文件:例如 g ...

  3. Spring Transaction 使用入门 (转)

    Spring Transaction 使用入门 一.开篇陈述 1.1 写文缘由 最近在系统学习spring框架IoC.AOP.Transaction相关的知识点,准备写三篇随笔记录学习过程中的感悟.这 ...

  4. 某邀请赛misc key家用完整版

    目录 题目下载 提示 解题过程 1.提取RGB值 2.找到key 3.循环异或,得到flag 反思 题目下载 题目名:key 提示 提取钥匙中特殊颜色的RGB循环异或KEY值 解题过程 1.提取RGB ...

  5. Golang微服务实践

    背景 在之前的文章<漫谈微服务>我已经简单的介绍过微服务,微服务特性是轻量级跨平台和跨语言的服务,也列举了比较了集中微服务通信的手段的利弊,本文将通过RPC通信的方式实现一个增删查Redi ...

  6. MinGW g++.exe 编译 DLL 时,导出函数名带@的问题

    今天尝试用CodeBlocks写了一个简单的Dll,发现生成的 dll 文件导出的函数名后面都有一个 @xxx 从生成的 libDll2.def 中看到: EXPORTS DllMain@ @ Max ...

  7. C#】通过遍历IFrame访问页面元素

    最近在做一个小项目,期间需要用到C#去操作IE页面中的元素,实现自动填写表单并且提交的功能,想这网上关于这方面的东西肯定很多,于是开始在网上找资料. 在逆心的博客上找到些东西对自己帮助很大,原文链接: ...

  8. HP Client Security Manager

    HP Client Security Manager - SP77916   操作系统:windows 10 64位   HP Client Security Manager - SP77916.ex ...

  9. ES6中的关键字 - let

    let关键字 1.let关键字声明的变量仅仅在自己的块级作用域内起作用,出了块级作用域就不起作用了: var arr2 = []; for (let index = 0; index < 10; ...

  10. java实现二维码的生成和解读

    Java利用QRCode.jar包实现二维码编码与解码   QRcode是日本人94年开发出来的.首先去QRCode的官网http://swetake.com/qrcode/java/qr_java. ...