我正在尝试在ExtJS中创建一个自定义伪选择器来执行不区分大小写的搜索。但是,我一直收到这个错误:
未捕获的TypeError:对象#没有方法' containsIgnoreCase'
这是JSFiddle(结果记录在控制台中):
这是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
答案 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/