js树搜索框查询所有匹配节点及父节点(纯js实现)
// 搜索框输入查询树节点(纯前台js)
//name 搜索框输入的值;
//wgObj.dwtreeDateAll 为树 的全量数据
// titleArr 与输入框匹配的节点数组
//arrTarget 未去重的目标节点数组
//wgObj.dwtreeDate 已去重的目标节点数组
//树数据结构
// [{
// "id": "ff8080814c972f3f014c981aae1a1501",
// "parentId": "ff8080814c972f3f014c981aae0f14ff",
// "title": "电力调度控制中心"
// },
// {
// "id": "ff8080814c972f3f014c981aae5c150d",
// "parentId": "ff8080814c972f3f014c981aae1a1501",
// "title": "继电保护室"
// },
// {
// "id": "ff8080814c972f3f014c981aae67150f",
// "parentId": "ff8080814c972f3f014c981aae1a1501",
// "title": "方式计划室"
// },
// {
// "id": "ff8080814c972f3f014c981aae7e1513",
// "parentId": "ff8080814c972f3f014c981aae0f14ff",
// "title": "安全监察质量部(保卫部)"
// },
// {
// "id": "ff80808157b555570157d538316a1dd1",
// "parentId": "ff8080814c972f3f014c981aa9e61441",
// "title": "客户服务中心"
// }
// ]
////////输入框搜索时调用的方法
function SearchTreeByName(name) {
//先获取与输入框匹配的节点数组
var titleArr = [];
wgObj.dwtreeDateAll.forEach(function (o) {
if (o.title.lastIndexOf(name) != -1) titleArr.push(o);
});
//递归检索节点(子节点符合父节点不符合也需要带上父节点)
var arrTarget = [];
for (var i = 0; i < titleArr.length; i++) {
var forFn = function (id, name) {
for (var j = 0; j < wgObj.dwtreeDateAll.length; j++) {
if (id == wgObj.dwtreeDateAll[j].id) {
arrTarget.push(wgObj.dwtreeDateAll[j]);
forFn(wgObj.dwtreeDateAll[j].parentId, name);
break
}
}
};
forFn(titleArr[i].id, titleArr[i].title);
}
//递归完之后去重取目标树数据
wgObj.dwtreeDate = [];
for (var i = 0; i < arrTarget.length; i++) {
var flag = 1;
for (var j = 0; j < wgObj.dwtreeDate.length; j++) {
if (wgObj.dwtreeDate[j].id == arrTarget[i].id && wgObj.dwtreeDate[j].parentId == arrTarget[i].parentId) {
flag = 0;
}
}
flag === 1 ? wgObj.dwtreeDate.push(arrTarget[i]) : false;
}
return wgObj.dwtreeDate;
}
//单纯的获取当前节点的所有父节点方法(递归)
// function familyTree (arr1, id) {
// var temp = []
// var forFn = function (arr, id) {
// for (var i = 0; i < arr.length; i++) {
// var item = arr[i]
// if (item.id === id) {
// temp.push(item)
// forFn(arr1, item.parentId)
// break
// } else {
// if (item.children) {
// forFn(item.children, id)
// }
// }
// }
// }
// forFn(arr1, id)
// return temp
// }
js树搜索框查询所有匹配节点及父节点(纯js实现)的更多相关文章
- chosen.jquery.js 搜索框只能从头匹配的解决思路+方法
chosen.jquery.js 搜索框只能从头匹配的解决思路+方法 心急者请直接看下方 总结 ,由于本问题未能找到直接答案,所以只能通过修改源码解决.故将修改源码思路贴出来供大家参考,在遇到其他改源 ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
- 实现DataTables搜索框查询结果高亮显示
DataTables是封装好的HTML表格插件,丰富了HTML表格的样式,提供了即时搜索.分页等多种表格高级功能.用户可以编写很少的代码(甚至只是使用官方的示例代码),做出一个漂亮的表格以展示数据.关 ...
- 使用pycharm搜索框和正则表达式匹配内容
使用pycharm搜索框和正则表达式匹配内容原创薯饼__ 最后发布于2019-03-04 19:28:53 阅读数 660 收藏展开有时候我们要在爬虫网站中匹配各种各样的文本块,以获取需要的信息,每一 ...
- python selenium 时间搜索框查询和日期大小比较
在做selenium自动化的时候遇到 时间搜索框查询(如下图)并比较查询结果是否在输入的时间之类. 首先,第一步要做的就是选择时间,并获取到所选时间的文本信息 如上图所示,获取到的时间搜索框并没有文本 ...
- (Elementui) el-tree 中英文过滤以及搜索到父子显示子节点,搜索到子节点显示父节点(filter-node-method)
案例下载:https://gitee.com/tudoumlp/just1.git (vue-ele-demo) 在项目中,会遇到树节点的搜索,中文和英文搜索,以及搜索到父节点匹配的时候同步显示该 ...
- 树形下拉框ztree、获取ztree所有父节点,ztree的相关方法
参考:jQuery树形控件zTree使用小结 需求 添加.修改的终端需要选择组织,组织是多级架构(树状图显示). 思路 1.因为下拉框需要树状图显示,所以排除使用select做下拉框,改用input ...
- MySQL递归查询树状表的子节点、父节点具体实现
mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算 ...
- JS获取子节点、父节点和兄弟节点的方法实例总结
转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...
- SQL 用;with 由所有的子节点查询到树结构中所有父节点
1.所有的子节点查询到树结构中所有父节点 RETURNS @Tree Table(PID )) as begin --DECLARE @ID VARCHAR() --SET @ID = ' ;with ...
随机推荐
- vue 解决循环引用组件/动态组件/组件未注册报错
使用动态组件报错 Unknown custom element: - did you register the component correctly? For recursive component ...
- 【Redis场景3】缓存穿透、击穿问题
场景问题及原因 缓存穿透: 原因:客户端请求的数据在缓存和数据库中不存在,这样缓存永远不会生效,请求全部打入数据库,造成数据库连接异常. 解决思路: 缓存空对象 对于不存在的数据也在Redis建立缓存 ...
- Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
简介 Grafana Labs 简介 Grafana 是用于时序数据的事实上的仪表盘解决方案.它支持近百个数据源. Grafana Labs 想从一个仪表盘解决方案转变成一个可观察性 (observa ...
- 举例说明postman接口测试
接口测试的本质就是接口的数据和数据库里的数据作对比 接口测试,可以理解为测的是后端的程序,而系统测试的时候,测试的是前端的程序,前端只有在满足条件的时候才会调到接口,所以接口测试可以测得更全面更准确 ...
- 调用HttpClient.PostAsync时传token等值
做内部接口转发时加token验证需要传token值过去,有如下两种方式 string jsonContent = JsonConvert.SerializeObject(args); using(va ...
- 10分钟搞定简易MVVM
实现一个简易的 MVVM 分为这么几步来 1.类 Vue:这个类接收的是一个 options. el属性:根元素的id data属性:双向绑定的数据. 2.Dep 类: subNode数组:存放所依赖 ...
- Nacos入门
1.介绍 ①概要 官网:home (nacos.io) Nacos:Dynamic Naming and Configuration Service(动态命名和配置服务) 你可以看为:Eureka(注 ...
- Spring注解补充(一)
注解补充 挑一些常用,但是深入不多的总结一下. Bean的声明周期 在@Bean注解中,添加init属性和destroy属性 @Bean(initMethod = "initMethod&q ...
- Vulhub 漏洞学习之:Apache HTTPD
Vulhub 漏洞学习之:Apache HTTPD 目录 Vulhub 漏洞学习之:Apache HTTPD 1 Apache HTTPD 换行解析漏洞(CVE-2017-15715) 1.1 漏洞利 ...
- 基于官方Chrome、Firefox软件包得到便携版
1. 前言 安装好操作系统后,一般系统都带有浏览器,比如,Windows 10 自带Edge.Ubuntu 自带Firefox等等.有的时候我们想使用一下别的浏览器或者是别的版本(如,开发者版),可是 ...