技术标签: 功能插件
下载并引入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(允许修改节点时引入)
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='添加节点' onfocus='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获取对应信息或进行对应的操作
}
解决UE4不能动态存储UObject指针问题
转载http://www.cnblogs.com/specter45/p/github.html-1 登录githubgithub的官方网址:https://github.com ,如果没有账号,赶紧注册一个。点击Sign in进入登录界面,输入账号和密码登入github。1-2 创建repository(仓库)为啥要叫repository(仓库)?我起初也纳闷,...
首先,我们来看看如何获取客户端的IP地址(假设不使用代理):详细可以看看这二篇文章:客户端真实ip的函数,PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR代码:另外贴一些$_SERVER超级数组的信息:
滚动的事件很神奇,想了解他的神奇就来这里看吧
同步vCenter Server和ESXi的版本,以避免由于vCenter Server和ESXi中的vSAN支持不同而产生故障。为了使vCenter Server和ESXi上的vSAN组件实现最佳集成,请部署这两个 vSphere 组件的最新版本。请参见vCenter Server 安装和设置和vSphere 升级文档。...
众所周知,同样的一个话在中英文环境中的字符长度是不一样的。如果TextView没有做相应的适配,那么在切换环境之后读取xml中文本会导致UI变样。尤其是英文文本容易展示不全的问题。
说明:栗子转自简书,在他的基础上添加了重置和超过一定面积显示全图,仅做学习使用。(推荐7.2的代码)1.前端时间做的一个项目需要支持多终端,网页版需要使用html5中canvas画布对象对一组数据进行渲染还原,但是在实际实现过程中遇到了一个问题,canvas中没有mask(遮罩)层的概念,所以一些效果实现不了,最后翻看文档的时候发现可以通过Context对象的globalCompositeOp...
1、机器学习是什么第一阶段:试图使用逻辑和规则直接来演绎人类的智商和智能第二阶段: 让机器真正学会人类学习方式范式就是机器学习,通过大量的数据归纳出统计规律。 2、什么是模型类似于y=ax+b的数学公式就是对一个模型的定义,线性回归模型就是假设建立一个模型,符合P=w1X1+w2X2+w3X3+b等式的线性模型,w1,w2,w3作为此模型的参数。 3、监督学习与损失函数...
how to select rows which one of its columns values contains specific string in python?I have used the one mentioned here and got errors while I used sample data frame and it looks fine, I am suspiciou...
参考原始文档后, 自已总结一下, 有不对的地方请指正. 在MySQL中进行排序有两种算法, 以4.1版本为分水岭, 在此之前排序时的数据只包括ORDER BY中的列和一个记录的指针(Sort A), 在4.1之后多了一种改进的方法, 排序的数据中可以包括SELECT中的列和ORDER BY中的列(Sort B)Sort A中最主要的坏处是需要进行二次扫表, 第一次是将ORDER BY的列及记录指针...
妹有用镜像——清空缓存 设置镜像 或者更换镜像源npm node版本不和谐——以往的版本 | Node.jsnpm node vscode版本过旧——更新没使用管理员权限打开命令行——打开网速——自己想办法本地仓库——重新clone...
TEST 这篇日志,是直接从OneNote 2010里面发送到CSDN上去的!!发送接口如下:http://blog.csdn.net/jxitc/services/metablogapi.aspx 检测远程URL是否存在的三种方法 收藏 private void Page_Load(object sender, System.EventArgs e){ string url1 = "http://dotnet.aspx.cc/";