zTree树的模糊搜索

工作需要,所以做了一个比较方便的搜索功能;
1、功能实现都是基于zTree的API;
2、如有更好的建议,欢迎拍我;
其中要说明下的是flag 这个字段, 这是我自己定义的扩展字段,代码中涉及到flag 请先了解zTree哦

  1 /**
  2      * 展开树
  3      * @param treeId
  4      */
  5     function expand_ztree(treeId){
  6         var treeObj = $.fn.zTree.getZTreeObj(treeId);
  7         treeObj.expandAll(true);
  8     }
  9
 10     /**
 11      * 收起树:只展开根节点下的一级节点
 12      * @param treeId
 13      */
 14     function close_ztree(treeId){
 15         var treeObj = $.fn.zTree.getZTreeObj(treeId);
 16         var nodes = treeObj.transformToArray(treeObj.getNodes());
 17         var nodeLength = nodes.length;
 18         for (var i = 0; i < nodeLength; i++) {
 19             if (nodes[i].id == ‘0‘) {
 20                 //根节点:展开
 21                 treeObj.expandNode(nodes[i], true, true, false);
 22             } else {
 23                 //非根节点:收起
 24                 treeObj.expandNode(nodes[i], false, true, false);
 25             }
 26         }
 27     }
 28
 29     /**
 30      * 搜索树,高亮显示并展示【模糊匹配搜索条件的节点s】
 31      * @param treeId
 32      * @param searchConditionId 文本框的id
 33      */
 34     function search_ztree(treeId, searchConditionId){
 35         searchByFlag_ztree(treeId, searchConditionId, "");
 36     }
 37
 38     /**
 39      * 搜索树,高亮显示并展示【模糊匹配搜索条件的节点s】
 40      * @param treeId
 41      * @param searchConditionId        搜索条件Id
 42      * @param flag                     需要高亮显示的节点标识
 43      */
 44     function searchByFlag_ztree(treeId, searchConditionId, flag){
 45         //<1>.搜索条件
 46         var searchCondition = $(‘#‘ + searchConditionId).val();
 47         //<2>.得到模糊匹配搜索条件的节点数组集合
 48         var highlightNodes = new Array();
 49         if (searchCondition != "") {
 50             var treeObj = $.fn.zTree.getZTreeObj(treeId);
 51             highlightNodes = treeObj.getNodesByParamFuzzy("name", searchCondition, null);
 52         }
 53         //<3>.高亮显示并展示【指定节点s】
 54         highlightAndExpand_ztree(treeId, highlightNodes, flag);
 55     }
 56
 57     /**
 58      * 高亮显示并展示【指定节点s】
 59      * @param treeId
 60      * @param highlightNodes 需要高亮显示的节点数组
 61      * @param flag             需要高亮显示的节点标识
 62      */
 63     function highlightAndExpand_ztree(treeId, highlightNodes, flag){
 64         var treeObj = $.fn.zTree.getZTreeObj(treeId);
 65         //<1>. 先把全部节点更新为普通样式
 66         var treeNodes = treeObj.transformToArray(treeObj.getNodes());
 67         for (var i = 0; i < treeNodes.length; i++) {
 68             treeNodes[i].highlight = false;
 69             treeObj.updateNode(treeNodes[i]);
 70         }
 71         //<2>.收起树, 只展开根节点下的一级节点
 72         close_ztree(treeId);
 73         //<3>.把指定节点的样式更新为高亮显示,并展开
 74         if (highlightNodes != null) {
 75             for (var i = 0; i < highlightNodes.length; i++) {
 76                 if (flag != null && flag != "") {
 77                     if (highlightNodes[i].flag == flag) {
 78                         //高亮显示节点,并展开
 79                         highlightNodes[i].highlight = true;
 80                         treeObj.updateNode(highlightNodes[i]);
 81                         //高亮显示节点的父节点的父节点....直到根节点,并展示
 82                         var parentNode = highlightNodes[i].getParentNode();
 83                         var parentNodes = getParentNodes_ztree(treeId, parentNode);
 84                         treeObj.expandNode(parentNodes, true, false, true);
 85                         treeObj.expandNode(parentNode, true, false, true);
 86                     }
 87                 } else {
 88                     //高亮显示节点,并展开
 89                     highlightNodes[i].highlight = true;
 90                     treeObj.updateNode(highlightNodes[i]);
 91                     //高亮显示节点的父节点的父节点....直到根节点,并展示
 92                     var parentNode = highlightNodes[i].getParentNode();
 93                     var parentNodes = getParentNodes_ztree(treeId, parentNode);
 94                     treeObj.expandNode(parentNodes, true, false, true);
 95                     treeObj.expandNode(parentNode, true, false, true);
 96                 }
 97             }
 98         }
 99     }
100
101     /**
102      * 递归得到指定节点的父节点的父节点....直到根节点
103      */
104     function getParentNodes_ztree(treeId, node){
105         if (node != null) {
106             var treeObj = $.fn.zTree.getZTreeObj(treeId);
107             var parentNode = node.getParentNode();
108             return getParentNodes_ztree(treeId, parentNode);
109         } else {
110             return node;
111         }
112     }
113
114     /**
115      * 设置树节点字体样式
116      */
117     function setFontCss_ztree(treeId, treeNode) {
118         if (treeNode.id == 0) {
119             //根节点
120             return {color:"#333", "font-weight":"bold"};
121         } else if (treeNode.isParent == false){
122             //叶子节点
123             return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#660099", "font-weight":"normal"};
124         } else {
125             //父节点
126             return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#333", "font-weight":"normal"};
127         }
128     }
129
130     //==============HTML==============
131     <!--搜索框-->
132     <div class="padd" style="padding-bottom: 0px;">
133         <div class="input-append row-fluid" style="margin-bottom: 0px;">
134             <input id="search_condition" type="text" placeholder="请输入搜索条件" class="span8" style="font-size:12px"/>
135             <button type="button" class="btn btn-info" onclick="search_ztree(‘dep_tree‘, ‘search_condition‘)">搜索</button>
136         </div>
137     </div>
138     <!--树-->
139     <ul id="dep_tree" class="ztree"></ul>  

本文转载自:http://www.oschina.net/code/snippet_565465_33862

ps:ztree模糊搜索的demo,节点标红

http://www.ztree.me/v3/demo/cn/core/searchNodes.html

主要有一下设置,一开始找不到为什么没标红,看了好久。。。比较笨

1 var setting = {
2             view: {
3                 fontCss: getFontCss
4             }
5         };
6
7  function getFontCss(treeId, treeNode) {
8             return (!!treeNode.highlight) ? {color:"#A60000", "font-weight":"bold"} : {color:"#333", "font-weight":"normal"};
9         }
时间: 2024-07-31 07:26:56

zTree树的模糊搜索的相关文章

通用权限管理系统之权限菜单zTree树的展示及移动的处理方法

在通用权限管理系统中,有很多数据结构是有父子关系的,如组织机构,部门,权限菜单等,在展示的时候,大多数是通过zTree树的形式展现的,如下: 权限菜单展示 这种数据后台输出比较容易处理,参考如下获取某个子系统的全部操作菜单: 后台输出zTree树的数据 /// <summary> /// 获取module树结构数据 /// </summary> /// <param name="systemCode"></param> /// <r

从零认识ztree树插件

首先说绑定数据,怎么样绑定到树状菜单下.先贴代码: 1.第一步,先引入js脚本文件,还有一个css文件,还要引用一个jQuery的脚本文件 2.第二步,创建一个ul的标签,给它设置一个Id,并且给它一个class="ztree",这是必须的,与样式保持一致 3.第三步,$.fn.zTree.init($("#treeDemo"), setting, eval("(" + data + ")"));,这是一段初始化必须加载的.e

JavaScript之jQuery-8 jQuery 使用插件(zTree树插件、jQuery UI插件)

一.jQuery zTree树控件 zTree介绍 - zTree 是利用jQuery的核心代码,实现一套能完成常用功能的Tree插件 - 兼容IE.FireFox.Chrome 等主流浏览器 - 支持 JSON 数据 - 支持一次性静态生成和Ajax异步加载两种方式 - 支持tree的节点移动.编辑.删除 zTree使用步骤 - step 1: 下载zTree相关文件(js.css) - 下载地址: http://www.ztree.me/ - step 2: 引入相关文件 - css: 样式

ztree树 叶子节点路径的集合

1.Question Description: ztree树各个节点都带有路径,如“/根节点”,"/根节点/一级节点",“根节点/一级节点/二级节点‘; 现在想获取所选的最末级节点数据集合. 2.Solution: $("#btn_saveAssetInfo").click(function(){ var treeObj = $.fn.zTree.getZTreeObj("toggle"); var nodes = treeObj.getChec

转:zTree树控件扩展篇:巧用zTree控件实现文本框输入关键词自动模糊查找zTree树节点实现模糊匹配下拉选择效果

是否可以借助于zTree实现文本框输入关键词自动模糊匹配zTree下拉树,然后选择下拉树内节点显示在文本框内且隐藏下拉树. 看到这个需求脑子里头大致已经想到了要如何实现这样一个需求,当时是限于时间问题所以没有动手处理.今天闲来无事琢磨了一下这个需求.我的解决思路如下所示: 1.监听文本框的onkeyup事件:实时传递其值到某个函数: 2.编写某个函数接收文本框的值通过zTree的模糊查找方法getNodesByParamFuzzy(key,value)获得: 3.将匹配到的节点列表结合重新赋值给

转:zTree树控件实战篇:针对多个下拉加载zTree树应该如何做出合理的配置

今天有一个zTree的朋友遇到一个非常棘手的问题,才研究zTree树控件两天就被上头催着看成果,很是苦恼.他面对的问题就是页面内多个地方需要下拉在其文本框下方加载zTree树,由于对zTree下拉加载树的一些关键配置以及原理的不太深入导致问题无从查起.今天就来一起聊聊这样一个下拉加载zTree的问题. 一.几个关键的配置需要注意 1.针对不同的下拉选择需要有自己独立控制zTree显示位置以及隐藏相应标签的方法: 2.需要根据所点击事件定位zTree的显示位置: 3.zTree树选择后需要加以判断

JQuery Ztree 树插件配置与应用小结

JQuery Ztree 树插件配置与应用小结 by:授客 QQ:1033553122 测试环境 Win7 jquery-3.2.1.min.js 下载地址: https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3.2.1.min.js zTree_v3-master.zip 下载地址: https://github.com/zTree/zTree_v3 插件配置与应用 应用效果展示 HTML代码片段 <!DOCTYPE h

转:zTree树控件入门之checkbox:如何动态设置节点的checkbox选择框启用与禁用状态(chkDisabled)

当一棵树的部分节点根据登入用户角色不同而决定是否启用节点前的checkbox选择框的时候,我们应该如何做呢?也或者如何在页面加载的时候动态根据当前登入用户角色动态切换节点前的checkbox的禁用状态? 针对上列一系列问题,今天这里将做一个统一的讲解: 关于节点前的checkbox选择框是否禁用,是通过属性chkDisabled来决定的,值为true则表示禁用:反之表示启用: 一.初始化设置节点禁用 示例代码如下所示: var zNodes =[ { id:1, pId:0, name:"随意勾

转:zTree树控件key配置之title:zTree树节点名称过长如何省略显示且鼠标移入节点上能够显示全称

当树节点的名称有些很长时,全部显示出来显得很拥挤的情况下,我们会想到用省略节点名称来代替,当鼠标移入节点时能够显示该节点的全称.这样我们应该如何做呢? 首先,我们要在树的节点内多增加一个属性用于设置该节点的全称,这里我们以title名称为例吧,示例代码如下所示: view sourceprint? 1.{ id:233, pId:23, name:"叶子节点233...",title:"叶子节点23333434343434"}, 2.{ id:234, pId:23