当前位置: 代码迷 >> Web前端 >> ext中过滤TreeNode的解决办法
  详细解决方案

ext中过滤TreeNode的解决办法

热度:195   发布时间:2012-08-28 12:37:01.0
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);
??? };

  相关解决方案