JQGrid Toolbar Search: поиск по нескольким словам для столбца - PullRequest
4 голосов
/ 21 января 2012

Я использую панель инструментов поиска.Можете ли вы найти несколько слов для столбца?Разделитель - это пробел, и поиск следует выполнять с помощью оператора Like.В результате поиск должен возвращать все строки, которые встретились со всеми словами в строке поиска, независимо от того, в каком порядке они идут в поле строки.Например, есть столбец «Название продукта», я хочу найти все строки, в которых название продукта содержит слово «рычаг» и содержит слово «слева».

1 Ответ

12 голосов
/ 21 января 2012

Интересный вопрос!

Я создал демонстрационную версию , которая демонстрирует, как реализовать поиск по нескольким словам:

enter image description here

Соответствующий код:

$grid.jqGrid('filterToolbar', {
    stringResult: true,
    defaultSearch: "cn",
    beforeSearch: function () {
        modifySearchingFilter.call(this, ' ');
    }
});

где modifySearchingFilter я определил так:

var modifySearchingFilter = function (separator) {
        var i, l, rules, rule, parts, j, group, str,
            filters = $.parseJSON(this.p.postData.filters);
        if (filters && typeof filters.rules !== 'undefined' && filters.rules.length > 0) {
            rules = filters.rules;
            for (i = 0; i < rules.length; i++) {
                rule = rules[i];
                if (rule.op === 'cn') {
                    // make modifications only for the 'contains' operation
                    parts = rule.data.split(separator);
                    if (parts.length > 1) {
                        if (typeof filters.groups === 'undefined') {
                            filters.groups = [];
                        }
                        group = {
                            groupOp: 'OR',
                            groups: [],
                            rules: []
                        };
                        filters.groups.push(group);
                        for (j = 0, l = parts.length; j < l; j++) {
                            str = parts[j];
                            if (str) {
                                // skip empty '', which exist in case of two separaters of once
                                group.rules.push({
                                    data: parts[j],
                                    op: rule.op,
                                    field: rule.field
                                });
                            }
                        }
                        rules.splice(i, 1);
                        i--; // to skip i++
                    }
                }
            }
            this.p.postData.filters = JSON.stringify(filters);
        }
    };

ОБНОВЛЕНИЕ: Бесплатно jqGrid поддерживает Операция поиска с пользовательской фильтрацией , которая очень упрощает реализацию таких сценариев, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...