ztree的添加、修改、删除及前后台交互
一、引入资源
下载并引入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的添加、修改、删除及前后台交互的更多相关文章
- JavaWeb_day03_员工信息添加修改删除
day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...
- Web 1三级联动 下拉框 2添加修改删除 弹框
Web 三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
第三章 建议学习时间8小时 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...
- SpringBoot定时任务升级篇(动态添加修改删除定时任务)
需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...
- 【转】C#添加修改删除文件文件夹大全
[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...
- oracle 表字段添加 修改 删除语法
修改列名 alter table 表明 rename column rename 老列名 to 新列名添加 字段alter table 表名 add(字段名 类型):删除字段alter table 表 ...
- EF简单的添加修改删除基本语法
using ( androidhiveEntities db = new androidhiveEntities() ) { #re ...
- thinkphp 添加 修改删除
在 MainController.class.php 添加 public function zhuCe() { //时间两个逻辑 // 1 显示页面 2向数据库添加 if(empty($_POST)) ...
- MySQL 字段常用操作 添加,修改,删除,调整字段顺序
整理备忘: 添加字段:alter table 表名Add column 字段名 字段类型 默认值 AFTER 字段名 (在哪个字段后面添加) 例子: alter table appstore_sou ...
随机推荐
- Apache的安装部署 2(加密认证 ,网页重写 ,搭建论坛)
一.http和https的基本理论知识1. 关于https: HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道 ...
- IIS 安装 .net core 绑定为 https 使用SSL证书
前提条件: 自己服务器(Windows Server 2016)运行 dotnet .\Web****.dll 服务是可以使用http访问的 但由于实际情况必须使用https 思想历程,但未用: 1. ...
- 【Activiti学习之三】Activiti API(二)
环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.流程定义1.中止与激活流程定义 package com.wjy.pd; import ...
- .net core 中的多环境配置
参考地址:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-2.2 官网说环 ...
- Python【每日一问】33
问: [基础题1]:设计一个重量转换器,输入以“g”为单位的数字后返回换算成“kg”的结果 [基础题2]:设计一个求直角三角形斜边长的函数,比如直角边长分别为3和4,输出结果为:The right t ...
- | C语言I作业03
| C语言I作业03 标签: 18软件 李煦亮 问题 答案 这个作业属于那个课程 C语言程序设计I 这个作业要求在哪里 https://edu.cnblogs.com 我在这个课程的目标是 学会和掌握 ...
- Python3多进程共享变量实现方法
今天同事反映一个问题让帮忙看一下:多进程共用一个变量,在一个进程中修改后,在另外的进程中并没有产生修改. 一.错误的实现方式 最初以为是没添加global声明导致修改未生效,但实际操作发现global ...
- Svn CleanUp failed解决方案
在项目目录下找到wc.db文件,使用sqlite工具打开,清空main下的WC_LOCK和 WORK_QUEUE表即可.
- Java随堂笔记二
变量常量类型转换和命名规范 变量和常量 static double salary = 2500; //属性:变量 //变量作用域: //类变量 static // 局部变量 ...
- ubuntu docker 搭建 mongodb,开启授权访问 redis,mysql mssql 备份还原
命令安装docker 如果您想从Ubuntu存储库安装docker版本,则可以运行下面的apt命令. sudo apt install docker.io等到安装完成后,您可以启动Docker并使用s ...