У меня есть наблюдаемый массив с тестами тестов, которые я хочу фильтровать в соответствии с текстом в поле поиска. Обновление фильтрации происходит после каждого нажатия клавиши, поэтому я ищу наиболее эффективный метод.Пользовательский фильтр-нокаут js observableArray
Проверить этот JS-скрипку упрощенной версии моей проблемы:
http://jsfiddle.net/LkqTU/23180/
Ниже вы можете увидеть фрагмент из скрипки. На данный момент фильтрация берет весь текст в поле поиска и проверяет поле «Имя» каждого теста на него.
Что я хочу? - это разделить текст фильтра на слова и искать каждое поле в testuite для каждого слова в поле поиска.
Я вам, например, пишу «user lol» в поле поиска, я хочу, чтобы он возвращал только теги testuite, которые содержат эти слова в любом поле (здесь два из этих тестов имеют «пользователь» в имени, lol "в описании).
self.filteredTestsuites = ko.computed(function() {
// If many white spaces in a row, replace with only one white space
fText = self.filterText().replace(/\s+/g, ' ');
// If there is anything in the search box, filter for this
// As of now this does not divide the filterText and only searches the Name field
var filteredCollection = ko.utils.arrayFilter(self.testsuites(), function(test) {
if(fText.length)
return (test.name.toUpperCase().indexOf(fText.toUpperCase()) >= 0);
else
return 1;
});
return filteredCollection;
}, self);
Мой вопрос как я могу сделать наиболее эффективным ищущий? Возможное решение заключается в том, что для каждого слова в поле поиска я ищу каждое поле в текущем testuite. Однако я хотел бы получить более общее решение, где мне не нужно указывать поля (например, имя, описание и т. Д.), И я также не уверен в эффективности этого метода.
Предложения?
что-то вроде этого jonas http://jsfiddle.net/supercool/LkqTU/23184/. cheers –
Слышали ли вы о плагине JQuery DataTables? http://www.datatables.net/ Мы используем его для системы управления документами, и ее довольно просто настроить, а также быстрый и тщательный поиск по всем столбцам, которые вы описываете. – Zack