2014-02-14 2 views
0

Я пытаюсь создать использование пользовательского псевдо-селектора в ExtJS для выполнения поиска по регистру. Тем не менее, я получаю эту ошибку:Пользовательский селектор Psuedo не работает в 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)'); 

Как я могу создать этот псевдоселектор?

Реф. 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

Смежные вопросы