Ztree树的异步搜索,打开该子节点的所以父节点

时间:2021-06-21 12:36:51
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
<title>测试</title>
<meta name="decorator" content="default" />
<script type="text/javascript">

var setting = {
async : {
enable : true,
url : "${ctx}/sys/area/treeData4Async",
autoParam : [ "id=nodeId", "name" ],
//  otherParam : {
//  "otherParam" : "zTreeAsyncTest"
//  },
// dataType: "text",//默认text 
// type:"get",//默认post 
dataType : "json",
dataFilter : filter
//异步返回后经过Filter 
},
data : {
simpleData : {
enable : true
// idKey:"id", 
// pIdKey:"pId", 
}
},
  view: {
  dblClickExpand: true,
  selectedMulti: false,
  expandSpeed: ($.browser.msie && parseInt($.browser.version)<=6)?"":"fast"
  },
callback : {
// beforeAsync: zTreeBeforeAsync, // 异步加载事件之前得到相应信息 
asyncSuccess : zTreeOnAsyncSuccess,//异步加载成功的fun 
asyncError : zTreeOnAsyncError, //加载错误的fun 
    //onNodeCreated: search_ztree //异步加载
}
};
//treeId是treeDemo 
function filter(treeId, parentNode, childNodes) {
if (!childNodes)
return null;
for (var i = 0, l = childNodes.length; i < l; i++) {
childNodes[i].name = childNodes[i].name.replace('', '');
}
return childNodes;
}
function zTreeOnAsyncError(event, treeId, treeNode) {
alert("异步加载失败!");
}
function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {
}
/***********************当你点击父节点是,会异步访问servlet,把id传过去*****************************/
var zNodes = [];
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting, zNodes); 
});


/**
     * 展开树
     * @param treeId  
     */
    function expand_ztree(treeId){
        var treeObj = $.fn.zTree.getZTreeObj(treeId);
        //表示 展开 全部节点
        treeObj.expandAll(true);
    }
     
    /**
     * 收起树:只展开根节点下的一级节点
     * @param treeId
     */
    function close_ztree(treeId){
     //必须在初始化 zTree 以后才可以使用此方法。用户可以随时使用此方法获取需要进行操作的 zTree 对象
        var treeObj = $.fn.zTree.getZTreeObj(treeId);
        //将 zTree 使用的标准 JSON 嵌套格式的数据转换为简单 Array 格式
        var nodes = treeObj.transformToArray(treeObj.getNodes());
        var nodeLength = nodes.length;
        for (var i = 0; i < nodeLength; i++) {
            if (nodes[i].id == '0') {
                //根节点:展开    1.需要 展开的节点数据  2.全部子孙节点展开 3.展开操作后,通过设置焦点保证此焦点进入可视区域内 4 执行此方法时触发 beforeExpand / onExpand 或 beforeCollapse / onCollapse 事件回调函数
                treeObj.expandNode(nodes[i], true, true, false);
            } else {
                //非根节点:收起
                treeObj.expandNode(nodes[i], false, true, false);
            }
        }
    }
     
    /**
     * 搜索树,高亮显示并展示【模糊匹配搜索条件的节点s】
     * @param treeId
     * @param searchConditionId 文本框的id
     */
    function search_ztree(treeId, searchConditionId){
        searchByFlag_ztree(treeId, searchConditionId, "");
    }
     
    /**
     * 搜索树,高亮显示并展示【模糊匹配搜索条件的节点s】
     * @param treeId
     * @param searchConditionId     搜索条件Id
     * @param flag                  需要高亮显示的节点标识
     */
    function searchByFlag_ztree(treeId, searchConditionId, flag){
        //<1>.搜索条件
        var searchCondition = $('#' + searchConditionId).val();
        //<2>.得到模糊匹配搜索条件的节点数组集合
        var highlightNodes = new Array();
        if (searchCondition != "") {
            var treeObj = $.fn.zTree.getZTreeObj(treeId); 
            //根据节点数据的属性搜索,获取条件模糊匹配的节点数据 JSON 对象集合   1.需要模糊匹配的属性名称 2.需要模糊匹配的属性值,3匹配模糊搜索的节点数据集合
            highlightNodes = treeObj.getNodesByParamFuzzy("name", searchCondition, null);
        }
        //<3>.高亮显示并展示【指定节点】
        highlightAndExpand_ztree(treeId, highlightNodes, flag);
    }
     
    /**
     * 高亮显示并展示【指定节点s】
     * @param treeId
     * @param highlightNodes 需要高亮显示的节点数组
     * @param flag           需要高亮显示的节点标识
     */
    function highlightAndExpand_ztree(treeId, highlightNodes, flag){
        var treeObj = $.fn.zTree.getZTreeObj(treeId);
        //<1>. 先把全部节点更新为普通样式
        var treeNodes = treeObj.transformToArray(treeObj.getNodes());
        for (var i = 0; i < treeNodes.length; i++) {
            treeNodes[i].highlight = false;
            //更新某节点数据,主要用于该节点显示属性的更新。
            treeObj.updateNode(treeNodes[i]);
        }
        //<2>.收起树, 只展开根节点下的一级节点
        close_ztree(treeId);
        //<3>.把指定节点的样式更新为高亮显示,并展开
        if (highlightNodes != null) {
            for (var i = 0; i < highlightNodes.length; i++) {
                if (flag != null && flag != "") {
                    if (highlightNodes[i].flag == flag) {
                        //高亮显示节点,并展开
                        highlightNodes[i].highlight = true;
                        //更新某节点数据,主要用于该节点显示属性的更新。
                        treeObj.updateNode(highlightNodes[i]);
                        //高亮显示节点的父节点的父节点....直到根节点,并展示
                        //获取 treeNode 节点的父节点。
                        var parentNode = highlightNodes[i].getParentNode();
                        //递归得到指定节点的父节点的父节点....直到根节点
                        var parentNodes = getParentNodes_ztree(treeId, parentNode);
                        //展开指定的节点
                        treeObj.expandNode(parentNodes, true, false, true);
                        treeObj.expandNode(parentNode, true, false, true);
                    }
                } else {
                    //高亮显示节点,并展开
                    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);
                }
            }
        }
    }
     
    /**
     * 递归得到指定节点的父节点的父节点....直到根节点
     */
    function getParentNodes_ztree(treeId, node){
        if (node != null) {
            var treeObj = $.fn.zTree.getZTreeObj(treeId);
            //获取 treeNode 节点的父节点。
            var parentNode = node.getParentNode();
            return getParentNodes_ztree(treeId, parentNode);
        } else {
            return node;
        }
    }
     
</script>
</head>

<body>
<div class="content_wrap">
<div class="zTreeDemoBackground left">
按名字过滤:<input type="text" id="dicKey"  onclick="search_ztree('treeDemo', 'dicKey')">
<ul id="treeDemo" class="ztree"></ul>
</div>
</div>


</body>
</html>

现在只能异步点击父节点 搜索查询不进后台查不到 是什么情况
然后怎么改?可以实现

2 个解决方案

#1


@RequiresPermissions("user")
@ResponseBody
@RequestMapping(value = "treeData4Async")
public List<Map<String, Object>> treeData4Async(@RequestParam(required=false) String nodeId,String name, HttpServletResponse response) {
List<Map<String, Object>> mapList = Lists.newArrayList();
  List<Area> list = areaService.findChildren(nodeId,name);
for (int i=0; i<list.size(); i++){
Area e = list.get(i);
List<Area> lists = areaService.findChildren(e.getId(),null);
Map<String, Object> map = Maps.newHashMap();
map.put("id", e.getId());
map.put("pId", e.getParentId());
map.put("name", e.getName());
if(lists.size()>0){
map.put("isParent", true);
}
mapList.add(map);
}
return mapList;
}


这是后台的

#2


Ztree树的异步搜索,打开该子节点的所以父节点

就是现在的问题是搜索的时候没有进后台  js都执行了

#1


@RequiresPermissions("user")
@ResponseBody
@RequestMapping(value = "treeData4Async")
public List<Map<String, Object>> treeData4Async(@RequestParam(required=false) String nodeId,String name, HttpServletResponse response) {
List<Map<String, Object>> mapList = Lists.newArrayList();
  List<Area> list = areaService.findChildren(nodeId,name);
for (int i=0; i<list.size(); i++){
Area e = list.get(i);
List<Area> lists = areaService.findChildren(e.getId(),null);
Map<String, Object> map = Maps.newHashMap();
map.put("id", e.getId());
map.put("pId", e.getParentId());
map.put("name", e.getName());
if(lists.size()>0){
map.put("isParent", true);
}
mapList.add(map);
}
return mapList;
}


这是后台的

#2


Ztree树的异步搜索,打开该子节点的所以父节点

就是现在的问题是搜索的时候没有进后台  js都执行了