2014-02-14 78 views
0

我想在ExtJS中創建一個使用自定義僞選擇器來執行不區分大小寫的搜索。不過,我不斷收到此錯誤:在ExtJS中不能工作的自定義僞選擇器

Uncaught TypeError: Object # has no method '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)'); 

我怎樣才能創建這個僞選擇器?

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

回答

1

它看起來像你試圖使用ComponentQuery,當你想要的是一個DomQuery。前者允許你在當前頁面中選擇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/更新示例

+0

謝謝,男人!仍在學習ExtJS - 希望我使用jQuery :) – user1477388

相關問題