zTree的树形图显示、右键事件、新增节点、修改节点、删除节点、选中节点等功能。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../frames/zTree_v3/css/zTreeStyle/zTreeStyle.css"/>
</head>
<body>
<div class="body-side">
<ul id="treeDemo" class="ztree"></ul>
</div>
</body>
<script src="../frames/jquery-1.11.1.min.js"></script>
<script src="../frames/zTree_v3/js/jquery.ztree.all.js"></script>
<script type="text/javascript">
/*ztree右键事件新增节点-liuyuru*/
function zTreeRightClick(event, treeId, treeNode) {
var parentvalue;
if (treeNode) {
parentvalue = treeNode.id;
} else {
parentvalue = 0;
}
var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
treeObj.addNodes(treeNode, {
id: 10, //动态更改
pId:parentvalue,
name: "NewNode"
});
var node = treeObj.getNodeByParam("id", 10, null); //根据新的id找到新添加的节点
// treeObj.selectNode(node); //让新添加的节点处于选中状态
treeObj.editName(node);
}
/*ztree新增节点图标绑定事件-liuyuru*/
function myztreebind(btn, treeNode) {
if (btn) btn.bind("click", function () {
alert("新增");
var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
treeObj.addNodes(treeNode, {
id: 10, //动态更改
pId: treeNode.id,
name: "NewNode"
});
var node = treeObj.getNodeByParam("id", 10, null); //根据新的id找到新添加的节点
treeObj.selectNode(node); //让新添加的节点处于选中状态
treeObj.editName(node);
});
}
/*确认修改节点-liuyuru*/
function onRename(e, treeId, treeNode, isCancel) {
alert("修改");
}
/*删除节点-liuyuru*/
function beforeRemove(treeId, treeNode) {
var flag = false; //此处必须定义一个变量,不然还没确定就把节点从树上删除
if(!flag){
flag = true;
alert("删除");
}
return flag;
}
/*公用ztree*/
var postId;
var myZtree={
show:function (data, treeNodes,isexpanAll) {
/*ztree对象的配置数据-liuyuru*/
setvalue = {
view: {
addHoverDom: myZtree.addHoverDom,//鼠标移动到节点上时,显示用户自定义控件
removeHoverDom: myZtree.removeHoverDom,//需要与addHoverDom同时使用,隐藏用户自定义控件
selectedMulti: false,
showLine: false,
showIcon: true,
addDiyDom: myZtree.addDiyDom //用于在节点上固定显示用户自定义控件
},
edit: {
enable: true, //单独设置为true时,可加载修改、删除图标
editNameSelectAll: true
},
data: {
simpleData: {
enable: true
}
},
async: {
enable: true
},
callback: {
onClick: myZtree.zTreeOnClick,/*单击事件查询菜单-liuyuru*/
onRightClick: zTreeRightClick,//右键事件
beforeRename: myZtree.beforeRename,
beforeRemove: beforeRemove, //删除事件
onRename: onRename //修改重命名
}
};
$.fn.zTree.init($("#treeDemo"), setvalue, treeNodes);
var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
treeObj.expandAll(isexpanAll); //打开节点
if (data && treeNodes) {
postId = data[0].id === undefined ? data[0].id : 0;
if (postId) {
var treeNode = treeObj.getNodeByTId("treeDemo_1");
var node = treeObj.getNodeByParam("id", postId, null); //根据新的id找到新添加的节点
treeObj.selectNode(node); //让新添加的节点处于选中状态
}
}
},
zTreeOnClick:function(event, treeId, treeNode) {
postId = treeNode.id;
alert("选中")
},
addHoverDom:function(treeId, treeNode) {
/*节点小于2的才有新增按钮功能*/
if (treeNode.level < 2) {
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='add node' onfocus='this.blur();'></span>";
sObj.after(addStr); //加载添加按钮
var btn = $("#addBtn_" + treeNode.tId);
//绑定添加事件,并定义添加操作 需操作的调用页就必须存在该事件
myztreebind(btn, treeNode);
}
},
removeHoverDom :function(treeId, treeNode) {
$("#addBtn_" + treeNode.tId).unbind().remove();
},
addDiyDom:function(treeId, treeNode) {
var switchObj = $("#" + treeNode.tId + "_switch"), // 占位元素
icoObj = $("#" + treeNode.tId + "_ico"), // 图标元素
sObj = $("#" + treeNode.tId + "_span"); //获取节点信息
/*图标位置的更换*/
// if (!treeNode.children) {
// sObj.before(switchObj);
// }
},
beforeRename:function(treeId, treeNode, newName, isCancel) {
if (newName.length == 0) {
alert("名称不能为空!");
return false;
}
return true;
}
};
/*生成树形图*/
drag();
function drag() {
var data =[{id:1, pId:0, name: "父节点1"},
{id:11, pId:1, name: "子节点1"},
{id:12, pId:1, name: "子节点2"}];
var treeNodes = [];
for (var key in data) {
treeNodes[key] = {};
treeNodes[key]['id'] = data[key].id;
treeNodes[key]['name'] = data[key].name;
treeNodes[key]['pId'] = data[key].pId;
}
myZtree.show(data, treeNodes, true);
}
</script>
</html>
如图(新增按钮自己更换图标):
更多功能查询zTree – jQuery 树插件。