Посмотрите на демо от ответа .Если вы используете beforeSearch
(см. Предложение из комментария Джастина Этьера), вы можете легко изменить демо, чтобы использовать filterToolbar
.
ОБНОВЛЕНО : после перечитывания вашего вопроса еще раз внимательноВ свое время я увлекался вашей идеей выделить шаблоны поиска очень интересно.Поэтому я создал демонстрационную версию , которая демонстрирует, как реализовать ваше требование.Я использовал опции
loadonce: true,
ignoreCase: true
, чтобы сделать локальную фильтрацию данных без учета регистра.Если вы используете уже локальные типы данных (любые типы данных, за исключением 'xml'
и 'json'
), данные уже будут храниться локально, и вам не нужно добавлять дополнительную опцию loadonce: true
.
Ввод в поискеФильтровать над шаблонами поиска в сетке, данные будут не только фильтроваться по шаблонам, но и будет выделена часть шаблона самой ячейки в столбце, что улучшит видимость.Таким образом, вы можете увидеть результаты, как на следующем рисунке:
Теперь о реализации.Прежде всего я использую плагин Highlight , который вы нашли, но я изменил строку
spannode.className = 'highlight';
на
spannode.className = 'ui-state-highlight';
, чтобы быть более совместимым с jQuery UI CSS.
Я не использую никакую функцию обратного вызова filterToolbar , потому что все обратные вызовы будут вызываться до того, как будет заполнено новое тело сетки. filterToolbar заполнить filters
часть postData
, установить для параметра search
в jqGrid значение true
и вызвать reloadGrid
.Поэтому следует выделить данные внутри обратного вызова loadComplete
(или gridComplete
), потому что в настоящий момент все данные, которые должны быть выделены, находятся в сетке.Поэтому я использовал filterToolbar в простой форме
$("#list1").jqGrid('filterToolbar',
{stringResult: true, searchOnEnter: false, defaultSearch: 'cn'});
Реализация loadComplete
вы найдете ниже:
loadComplete: function () {
var filters, i, l, rules, rule, iCol, $this = $(this);
if (this.p.search === true) {
filters = $.parseJSON(this.p.postData.filters);
if (filters !== null && typeof filters.rules !== 'undefined' &&
filters.rules.length > 0) {
rules = filters.rules;
l = rules.length;
for (i = 0; i < l; i++) {
rule = rules[i];
iCol = getColumnIndexByName($this, rule.field);
if (iCol >=0) {
$('>tbody>tr.jqgrow>td:nth-child(' + (iCol + 1) +
')', this).highlight(rule.data);
}
}
}
}
}