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".
Antwort
Zu viele Anzeigen?
Oleg
Punkte
219333
Eine interessante Frage!
Ich habe die Demo die zeigen, wie man eine Mehrwortsuche implementiert:
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.