一、添加样式、jsjavascript
<link rel="stylesheet" href="${ctx}/hollybeacon/resources/plugins/zTree_v3/css/demo.css" type="text/css">css
<link rel="stylesheet" href="${ctx}/hollybeacon/resources/plugins/zTree_v3/css/zTreeStyle/zTreeStyle.css" type="text/css">html
<script type="text/javascript" src="${ctx}/hollybeacon/resources/plugins/zTree_v3/js/jquery.ztree.core-3.5.js"></script>java
<script type="text/javascript" src="${ctx}/hollybeacon/resources/plugins/zTree_v3/js/jquery.ztree.excheck-3.5.js"></script>node
<script type="text/javascript" src="${ctx}/hollybeacon/resources/plugins/zTree_v3/js/jquery.ztree.exedit-3.5.js"></script>jquery
若是想要hideNodes、showNodes等方法,必须加入数据库
<script type="text/javascript" src="${ctx}/hollybeacon/resources/plugins/zTree_v3/js/jquery.ztree.exhide-3.5.js"></script>json
若是不须要那些hideNodes、showNodes等方法以只添加一个js,代替上面的三个js数组
<script type="text/javascript" src="${ctx}/hollybeacon/resources/plugins/zTree_v3/js/jquery.ztree.all-3.5.min.js"></script>app
二、html设置一个div、ul,注意ul的class是固定的ztree
<div class="treecontentpane">
<ul id="busTree" class="ztree">
</ul>
</div>
三、写js操做数据
-
-
-
-
-
selectedMulti: false, //在复制的时候,是否容许选中多个节点。true为支持,按下ctrl键生效,false不支持。
-
dblClickExpand: false, //双击的时候是否切换展开状态。true为切换,false不切换
-
fontCss: setFontCss_ztree //设置节点的颜色
-
-
-
-
enable: true, //若是enable为flase,那么树就不能移动了
-
showRemoveBtn: true, //是否显示树的删除按钮
-
showRenameBtn: true, //是否显示数的重命名按钮
-
isSimpleData : true, //数据是否采用简单 Array 格式,默认false
-
treeNodeKey : "id", //在isSimpleData格式下,当前节点id属性
-
treeNodeParentKey : "parentId",//在isSimpleData格式下,当前节点的父节点id属性
-
showLine : true, //是否显示节点间的连线
-
removeTitle: "删除节点",//删除Logo的提示
-
renameTitle: "编辑节点",//修改Logo的提示
-
-
-
-
-
-
-
-
-
-
-
-
-
-
url:holly.getPath() + "/rest/treeCode/showZtreeSyncRest",
-
contentType:"application/json",
-
autoParam: ["id"], //异步加载数据,自动添加id参数,会自动获取当前节点的id值
-
dataFilter:filter, //过滤,跟easy-ui中的loadFilter方法同样。
-
otherParam: { "id":"1", "code_name":"固网测试"}//提交的时候就会提交参数id=1&code_name=固网测试
-
-
-
-
-
-
-
-
enable:true,//若是为true,能够直接把从数据库中获得的List集合自动转换为Array格式。而没必要转换为json传递
-
-
pIdKey:"parentId",//节点的父节点id
-
-
-
-
-
-
beforeDrag: beforeDrag,//拖拽以前
-
beforeDrop: beforeDrop,//拖拽结束
-
onDrop: zTreeOnDrop,//拖拽结束后
-
//onDrag: zTreeOnDrag,//拖拽的时候
-
beforeRemove: zTreeBeforeRemove,//删除节点前
-
onRemove: zTreeOnRemove,//节点删除以后
-
beforeEditName: zTreeBeforeEditName,//进行编辑以前
-
//beforeRename: zTreeBeforeRename,//重命名节点以前
-
//onRename: zTreeOnRename,//重命名以后
-
onClick: zTreeOnClick,//点击
-
onRightClick: zTreeOnRightClick,//右键
-
onAsyncSuccess: zTreeOnAsyncSuccess//异步加载
-
//beforeExpand: beforeExpand,//展开节点前
-
//onAsyncSuccess: onAsyncSuccess,//异步数据加载成功的回调
-
//onAsyncError: onAsyncError //异步数据加载错误后回调
-
-
-
-
//对获得的json数据进行过滤,加载树的时候执行
-
function filter(treeId, parentNode, responseData) {
-
var contents = (responseData.content)?responseData.content:responseData;
-
//当第一次加载的时候只显示一级节点,可是要让别人知道对应一级节点下是否有数据,那么就须要设置isParent,为true能够展开,下面有数据。
-
//我这里是因为异步加载数据,只加载根节点以及一级节点。那么一级节点下还有子节点,因此设置isParent显示还有子节点的效果
-
-
for(var i= 0 ; i
<contents.length;i++){
-
-
var isParent = contents[i].isParent;
-
-
-
-
-
-
contents[i].isParent = isParent;
-
-
-
-
-
-
//加载树的默认显示根节点,以及一级节点,每次异步加载数据都会执行这个方法,也就是有请求都会异步
-
function zTreeOnAsyncSuccess(event, treeId, msg) {
-
-
var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
-
var nodes = treeObj .getNodes();
-
for(var i = 0;i<nodes.length;i++){
-
-
treeObj .expandNode(nodes[i], true);
-
-
-
holly.showError("数据异常", err);
-
-
-
//设置一个标识,是为了解决点击的时候,执行异步。显示全部的以及节点,以及一级节点下的全部节点
-
注意:若是你是异步只加载了根节点和一级节点,那么增删改的时候,获得的异步结果,会获取不到该节点的子节点,只有zTreeOnAsyncSuccess方法执行完后,才可以取到子节点的信息。因此在Eclipse中run执行和debugger执行获得不一样的结果。由于run运行数据还没接受到。
-
/* var firstAsyncSuccessFlag = 0;
-
function zTreeOnAsyncSuccess(event, treeId, msg) {
-
if (firstAsyncSuccessFlag == 0 ) {
-
-
var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
var selectedNode = zTree.getSelectedNodes();
-
-
var nodes = zTree.getNodes();
-
-
treeObj.expandNode(nodes[0], true);
-
-
var childNodes = zTree.transformToArray(nodes[0]);
-
-
treeObj .expandNode(childNodes[1], true);
-
-
treeObj .selectNode(childNodes[1]);
-
firstAsyncSuccessFlag = 1;
-
-
holly.showError("数据异常", err);
-
-
-
-
-
zTree = $.fn.zTree.init($("#busTree"), setting);
-
-
var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
-
treeObj.reAsyncChildNodes(null, "refresh");
-
-
treeObj.reAsyncChildNodes(zTree.getSelectedNodes().childNodes,"refresh");
-
-
-
treeObj.getSelectedNodes()[0].codeName = $("#treeRootCodeName").val();
-
treeObj.getSelectedNodes()[0].codeValue = $("#treeRootCodeValue").val();
-
treeObj.SelectedNodes()[0].remark = $("#treeRootRemark").val();
-
-
treeObj.updateNode(zTree.getSelectedNodes()[0]);
-
-
一、根据查询的结果,显示对应树形结构。注意这里只能是对应查找几级节点的信息,还有待优化。
-
-
function searchByValue(){
-
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
-
//通过transformToArray转换后是一个Array数组,数组里的每一个元素都是object对象,这个对象里包含了node的21个属性。
-
var nodes = zTree.transformToArray(zTree.getNodes()[0].children);
-
var key=$("#codeName").val();
-
-
-
-
-
-
-
-
-
var nodeList=zTree.getNodesByParamFuzzy("CODE_NAME", key); //模糊匹配
-
//把获得的节点放到filterNodes临时数组中
-
-
for(var i=0;i<nodeList.length;i++){
-
-
if(nodeList[i].level==2) {
-
filterNodes.push(nodeList[i]);
-
-
-
-
zTree.showNodes(filterNodes);
-
-
for(var i=0;i<filterNodes.length;i++){
-
-
var parentNode = filterNodes[i].getParentNode();
-
-
zTree.expandNode(parentNode, true, false, false);
-
-
zTree.showNode(parentNode);
-
-
-
二、搜索变色功能,可是会显示所有信息,查询到的结果会显示不一样的颜色
-
-
function expand_ztree(treeId){
-
var treeObj = $.fn.zTree.getZTreeObj(treeId);
-
-
-
-
function close_ztree(treeId){
-
var treeObj = $.fn.zTree.getZTreeObj(treeId);
-
var nodes = treeObj.transformToArray(treeObj.getNodes());
-
var nodeLength = nodes.length;
-
for (var i = 0; i < nodeLength; i++) {
-
if (nodes[i].PARENT_ID == null) {
-
-
treeObj.expandNode(nodes[i], true, true, false);
-
-
-
treeObj.expandNode(nodes[i], false, true, false);
-
-
-
-
-
function searchByValue(){
-
searchByFlag_ztree("treeDemo","codeName");
-
-
-
function searchByFlag_ztree(treeId, searchConditionId){
-
-
var searchCondition = $('#' + searchConditionId).val();
-
-
var highlightNodes = new Array();
-
if (searchCondition != "") {
-
var treeObj = $.fn.zTree.getZTreeObj(treeId);
-
-
highlightNodes = treeObj.getNodesByParamFuzzy("CODE_NAME", searchCondition, null);
-
-
-
highlightAndExpand_ztree(treeId, highlightNodes);
-
-
-
function highlightAndExpand_ztree(treeId, highlightNodes){
-
var treeObj = $.fn.zTree.getZTreeObj(treeId);
-
-
var treeNodes = treeObj.transformToArray(treeObj.getNodes());
-
var nodes = treeObj.transformToArray(treeObj.getNodes()[0].children);
-
for (var i = 0; i
< treeNodes.length; i++) {
-
treeNodes[i].highlight = false;
-
treeObj.updateNode(treeNodes[i]);
-
-
-
-
//
<3>.把指定节点的样式更新为高亮显示,并展开
-
if (highlightNodes != null) {
-
for (var i = 0; i
< highlightNodes.length; i++) {
-
-
highlightNodes[i].highlight = true;
-
treeObj.updateNode(highlightNodes[i]);
-
//高亮显示节点的父节点的父节点....直到根节点,并展现
-
var parentNode = highlightNodes[i].getParentNode();
-
var parentNodes = getParentNodes_ztree(treeId, parentNode);
-
-
treeObj.expandNode(parentNodes, true, false, true);
-
treeObj.expandNode(parentNode, true, false, true);
-
-
setFontCss_ztree("",highlightNodes[i]);
-
-
-
-
-
function getParentNodes_ztree(treeId, node){
-
-
var treeObj = $.fn.zTree.getZTreeObj(treeId);
-
var parentNode = node.getParentNode();
-
return getParentNodes_ztree(treeId, parentNode);
-
-
-
-
-
-
function setFontCss_ztree(treeId, treeNode) {
-
if (treeNode.PARENT_ID == null) {
-
-
return {color:"#333", "font-weight":"bold"};
-
} else if (treeNode.isParent == false){
-
-
return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#660099", "font-weight":"normal"};
-
-
-
return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#333", "font-weight":"normal"};
-
-
-
//点击的时候判断节点有没有数据,以便于datadrid是否请求后台刷新
-
-
-
-
-
-
-
var filterNodes = treeObj.getNodesByFilter(filters);
-
-
return (node.highlight == true);
-
-
-
treeObj.getNodesByParamFuzzy("CODE_NAME", searchCondition, null);
-
-
function addHoverDom(treeId, treeNode) {
-
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>";
-
-
var btn = $("#addBtn_"+treeNode.tId);
-
if (btn) btn.bind("click", function(){
-
-
treeBusinessManager.newTreeDialog();
-
-
-
-
-
function removeHoverDom(treeId, treeNode) {
-
$("#addBtn_"+treeNode.tId).unbind().remove();
-
-
-
//需求:当只能在叶子节点上添加数据的时候,可是展示的时候,须要若是点击叶子节点显示叶子节点的数据,点击节点显示该节点下的全部叶子节点的信息。
-
//注意:这里数据用,区分id,是为了去后台进行in查询
-
function getAllChildNodes(treeNode) {
-
var treeObj = $.fn.zTree.getZTreeObj("sheetTree");//获取ztree
-
var childNodes = treeObj.transformToArray(treeNode);//把该节点的下的全部数据转换为数组
-
-
-
for(i = 0; i
< childNodes.length; i++) {
-
-
if(!childNodes[i].isParent){
-
nodes[j] = childNodes[i].id;
-
-
-
-
-
-
-
-
getChildNodes:function(treeNode,result){
-
-
var childrenNodes = treeNode.children;
-
-
for (var i = 0; i < childrenNodes.length; i++) {
-
result += ',' + childrenNodes[i].id;
-
result = sheetShareManager.getChildNodes(childrenNodes[i], result);
-
-
-
-
-
-
-
function refreshNode(id) {
-
var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
var node = treeObj.getNodeByParam("id", id, null);
-
-
treeObj.reAsyncChildNodes(node, "refresh");
-
-
-
-
-
-
-
-
function refreshParentNode(id) {
-
var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
var node = treeObj.getNodeByParam("id", id, null);
-
var pNode = node.getParentNode();
-
-
-
-
-
-
-
-
$.fn.zTree.destroy("busTree");
-
-
function zTreeBeforeRename(treeId, treeNode, newName, isCancel) {
-
if (newName.length>10||newName.trim().length<=0) {
-
toastr.error("填写信息不符合规则!");
-
var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
-
treeObj.cancelEditName();
-
-
-
-
-
function zTreeOnRename(event, treeId, treeNodes, isCancel) {
-
//真正触发的时候为undefiend。触发不成功的时候,为true
-
if(isCancel == undefined){
-
-
-
-
//右键显示新增,修改,删除(与easy-ui总体相似)
-
-
function zTreeOnRightClick(event, treeId, treeNode) {
-
var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
-
treeObj.selectNode(treeNode);
-
//这里能够为为div添加click事件,进行新增,修改,删除操做。
-
注意:设置选中节点,才能去对应的操做方法中获取选中的几点
-
(var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
var nodes = treeObj.getSelectedNodes();)
-
$('#configure-tree-menu').menu('show',{left: event.pageX,top: event.pageY});
-
-
-
//因为数据是异步加载的,因此不只须要进行数据删除,还须要进行逻辑删除。不然数据没有及时的回显,那么树的状态isParent还没改变。
-
for (var i=0, l=nodes.length; i < l; i++) {
-
treeObj.removeNode(nodes[i]);
-
-
//在onBeforeRemove中操做,异步的判断
-
-
var treeObj = $.fn.zTree.getZTreeObj("busTree");
-
treeObj.selectNode(treeNode);
-
var nodes = treeObj.getSelectedNodes();
-
for (var i=0, l=nodes.length; i < l; i++) {
-
treeObj.removeNode(nodes[i]);//默认是false,若是设置为true,那么就会触发onRemove函数
-
-
-
<div id="configure-tree-menu" class="easyui-menu" style="width:150px;">
-
<div id="configureAdd" data-options="iconCls:'icon-add'">新增节点</div>
-
<div id="configureEdit" data-options="iconCls:'icon-edit'">编辑节点</div>
-
<div id="configureDelete" data-options="iconCls:'icon-remove'">删除节点</div>