自定义伪选择器在ExtJS中不起作用

时间:2014-02-14 18:08:15

标签: javascript extjs

我正在尝试在ExtJS中创建一个自定义伪选择器来执行不区分大小写的搜索。但是,我一直收到这个错误:

  

未捕获的TypeError:对象#没有方法' containsIgnoreCase'

这是JSFiddle(结果记录在控制台中):

http://jsfiddle.net/k4ggq/9/

这是JavaScript:

Ext.ComponentQuery.pseudos.containsIgnoreCase = function(n, i, m) {
    return Ext.get(n).dom.innerText.toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};

var showEls = Ext.query('.serviceGridItem:containsIgnoreCase(mytext)');

如何创建此伪选择器?

参考。 http://www.objis.com/formationextjs/lib/extjs-4.0.0/docs/api/Ext.ComponentQuery.html

1 个答案:

答案 0 :(得分:1)

当你想要的是DomQuery时,看起来你正在尝试使用ComponentQuery。前者允许您在当前页面中选择Ext.Component类,其中后者选择DOM元素。

Ext.DomQuery.pseudos.containsIgnoreCase = function(elems, strToMatch) {
    var results = [], ri = -1;
    strToMatch = new RegExp(strToMatch, "ig");
    for(var i = 0, len = elems.length; i < len; i++){
        var dom = Ext.get(elems[i]).dom;
        if(strToMatch.test(dom.textContent) || strToMatch.test(dom.innerText)){
            results.push(elems[i]);
        }
    }
    return results;
};

以上内容应该有效 - 请注意,innerText在Firefox中不起作用,因此进行了两次测试。

有关更新的示例,请参阅http://jsfiddle.net/Ep29Q/