4 Stimmen

JQGrid Toolbar Searching: Suche nach mehreren Wörtern für eine Spalte

Ich verwende die Symbolleiste Suche. Können Sie nach mehreren Wörtern in einer Spalte suchen? Das Trennzeichen ist ein Leerzeichen und die Suche sollte mit dem Operator Like durchgeführt werden. Als Ergebnis sollte die Suche alle Zeilen zurückgeben, die alle Wörter in der Suchzeichenfolge erfüllen, unabhängig von der Reihenfolge, in der sie in einem Feld oder einer Zeile stehen. Zum Beispiel gibt es eine Spalte "Produktname", ich möchte alle Zeilen finden, die Produktname enthält das Wort "Hebel" und enthält das Wort "links".

12voto

Oleg Punkte 219333

Eine interessante Frage!

Ich habe die Demo die zeigen, wie man eine Mehrwortsuche implementiert:

enter image description here

Der entsprechende Code lautet:

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

donde modifySearchingFilter Ich habe mich im Weg definiert:

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);
        }
    };

UPDATE: Kostenloses jqGrid unterstützt Benutzerdefinierte Filtersuche Operation , was die Umsetzung solcher Szenarien wie oben sehr erleichtert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X