转载: http://blog.csdn.net/xiaobai51509660/article/details/36011899

Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路:

一:FilterBy函数

实现思路:

1)对于treestore 结构类型,extjs提供了专门的迭代函数cascadeBy函数,用于对树型节点进行迭代

2)迭代树型结构,在回调函数中,判断是否存在所查询内容,如果存在,将节点的id数组里。

3)再次迭代树型结构,将不在数据里的节点进行隐藏。

4)每次查询过程中,将所有节点设置可见。

注:在extjs中,对于界面元素的操作,可利用Ext.dom.Element对界面元素dom进行显示操作。

首先定义一个类'MyExtend.lib.TreeFilter'

  1. /**
  2. * Created by bcm on 14-6-30.
  3. */
  4. Ext.define('Juliet.util.TreeFilter', {
  5. filterByText: function(text) {
  6. this.filterBy(text, 'text');
  7. },
  8. /**
  9. * 根据字符串过滤所有的节点,将不符合条件的节点进行隐藏.
  10. * @param 查询字符串.
  11. * @param 要查询的列.
  12. */
  13. filterBy: function(text, by) {
  14. debugger;
  15. this.clearFilter();
  16. var view = this.getView(),
  17. me = this,
  18. nodesAndParents = [];
  19. // 找到匹配的节点并展开.
  20. // 添加匹配的节点和他们的父节点到nodesAndParents数组.
  21. this.getRootNode().cascadeBy(function(tree, view) {
  22. var currNode = this;
  23. if (currNode && currNode.data[by] && currNode.data[by].toString().toLowerCase().indexOf(text.toLowerCase()) > -1) {
  24. me.expandPath(currNode.getPath());
  25. while (currNode.parentNode) {
  26. nodesAndParents.push(currNode.id);
  27. currNode = currNode.parentNode;
  28. }
  29. }
  30. }, null, [me, view]);
  31. // 将不在nodesAndParents数组中的节点隐藏
  32. this.getRootNode().cascadeBy(function(tree, view) {
  33. var uiNode = view.getNodeByRecord(this);
  34. if (uiNode && !Ext.Array.contains(nodesAndParents, this.id)) {
  35. Ext.get(uiNode).setDisplayed('none');
  36. }
  37. }, null, [me, view]);
  38. },
  39. clearFilter: function() {
  40. var view = this.getView();
  41. this.getRootNode().cascadeBy(function(tree, view) {
  42. var uiNode = view.getNodeByRecord(this);
  43. if (uiNode) {
  44. Ext.get(uiNode).setDisplayed('table-row');
  45. }
  46. }, null, [this, view]);
  47. }
  48. });

  接下来定义一个你自己的treepanel,并混入这个类

1
2
3
4
5
Ext.define('MyTreePanel',{
    extend:'Ext.tree.Panel',
    mixins:['MyExtend.lib.TreeFilter']
     
});

调用方法:treepanel.filterByText('xxx') 或treepanel.filterBy('xxx','列名') 进行过滤查询

实现结果图:

二:searchTables函数

实现思路:

1)循环迭代树型结构,利用正则表达式进行匹配,对于匹配的节点进行展开并选中。

2)再以此迭代节点的子节点,匹配节点进行展开并选中。

  1. // treepanel 模糊查询 ,展开树型结构,选中匹配项
  2. function searchTables(tree,value){
  3. tree.forEach(function(e){
  4. var content = e.raw.text;
  5. var re = new RegExp(Ext.escapeRe(value), 'i');
  6. if(re.test(content)||re.test(content.toUpperCase())){
  7. e.parentNode.expand();
  8. var tabllepanel=Ext.ComponentQuery.query('auditruleview treepanel[name=dataTables]')[0];
  9. var selModel = tabllepanel.getSelectionModel();
  10. selModel.select(e,true);
  11. if(!e.isLeaf()){
  12. e.expand();
  13. }
  14. }
  15. searchTables(e.childNodes,value);
  16. });
  17. }

实现效果图

Extjs tree 过滤查询功能的更多相关文章

  1. Extjs treePanel过滤查询功能【转】

    Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路: ...

  2. 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询

    前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...

  3. 在Winform界面中使用DevExpress的TreeList实现节点过滤查询的两种方式

    在我较早的一篇随笔<在DevExpress程序中使用TeeList控件以及节点查询的处理>中,介绍了在树形列表TreeList控件上面,利用SearchControl实现节点的模糊查询过滤 ...

  4. 【设计过程】.NET ORM FreeSql WhereDynamicFilter 动态表格查询功能

    前言 最近几乎每天40度,越热越不想面对电脑,还好开源项目都比较稳定没那么多待解决问题,趁着暑假带着女儿学习游泳已略有小成.游泳好处太多了,建议有孩子的都去学学,我是在岸边指导大约一周左右就学会了,目 ...

  5. 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

    创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...

  6. 完善ext.grid.panel中的查询功能(紧接上一篇)

    今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...

  7. WebService和AngularJS实现模糊过滤查询

    WebService和AngularJS实现模糊过滤查询   [概要] 网上看到一个不错的帖子,用WebService获取json,然后在前端使用AngularJs进行过滤搜索,看完文章后,按自己的想 ...

  8. FreeSql 新查询功能介绍

    FreeSql FreeSql 是一个功能强大的 NETStandard 库,用于对象关系映射程序(O/RM),提供了 CodeFirst/DbFirst/CURD/表达式函数/读写分离 等基础封装. ...

  9. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

随机推荐

  1. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  2. 【转】SQL SERVER 日期格式化

    0   或   100   (*)     默认值   mon   dd   yyyy   hh:miAM(或   PM)       1   101   美国   mm/dd/yyyy       ...

  3. 机器学习classification_report方法及precision精确率和recall召回率 说明

    classification_report简介 sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息. 主要 ...

  4. 手把手教你写一个java的orm(完)

    生成sql:select 上一篇讲了怎样生成一个sql中where的一部分,之后我们要做事情就简单很多了,就只要像最开始一样的生成各种sql语句就好了,之后只要再加上我们需要的条件,一个完整的sql就 ...

  5. 手动实现一个简单的ArrayList

    import org.omg.CORBA.PUBLIC_MEMBER; import java.io.Serializable; import java.util.*; import java.uti ...

  6. Java注解(二)

    前面了解了注解的基本内容,这次来看一下自定义注解. 自定义注解其实很简单,直接上代码: import java.lang.annotation.Documented; import java.lang ...

  7. hdu 1043 八数码问题

    Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  8. PL/SQL Developer 如何记住密码

    前言:使用时总结一下. 问题: 登录的时候不想每次都输入密码,能记住最好了. 解决方案: 1.点击配置->首选项 2.选择登录历史,勾上带口令存储,然后应用,确定即可.

  9. js-权威指南学习笔记5

    第六章 对象 1.对象的方法通常是继承的属性.这种原型式继承是JS的核心特征. 2.除了名字和值之外,每个属性还有一些与之相关的值,称为属性特性——可写/可枚举/可配置.数据属性的四个特性——值.可写 ...

  10. 3D旋转效果

    <!doctype html><html lang="en"><head>    <meta charset="UTF-8&qu ...