`
duyouhua1214
  • 浏览: 227872 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ext中过滤TreeNode的解决方法

 
阅读更多

  以下是实现代码:

 

var matched = [];


 var treeFilter = new Ext.tree.TreeFilter(this.agencyTree, {
                clearBlank : true,
                autoClear : true
        });

  function search() {
        var text = seachField.getValue();//seachField为TextField输入框对象
        treeFilter.clear();//treeFilter过滤条件
        matched = [];//匹配的节点
        // 如果输入的数据不存在,就执行clear()
        if (!text) {
            return;
        }
        tree.expandAll();
        // 根据输入制作一个正则表达式,'i'代表不区分大小写
        var re = new RegExp(Ext.escapeRe(text), 'i');
        // 找出所有匹配的结点

        tree.root.cascade(function(n) {
                    if (re.test(n.attributes['text'])) {
                        matched.push(n);
                    }
                }, this);
        // 从每个叶子结点向根方向处理,处理所有结点的枝叶,
        // 如果该枝叶包含匹配的结点,则保留,否则裁剪掉(隐藏)
        tree.root.cascade(function(n) {
            if (n.isLeaf()) {
                // 处理每一条子结点路径
                n.bubble(function(nbb) {
                    // 从叶子到根,逐个剪掉
                    var contain = false;
                    for (var mted = 0; mted < matched.length; mted++) {
                        if (nbb.contains(matched[mted]) || nbb == matched[mted]) {
                            // 包含匹配的结点
                            contain = true;
                            break;
                        }
                    }
                    // 把不包含匹配结点的结点隐藏
                    if (!contain) {
                        nbb.ui.hide();
                        treeFilter.filtered[nbb.id] = nbb;
                    }
                }, this);
            }
        }, this);
    };

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics