興味深い質問!
対応するコードである:
Iはマルチワード検索を実装する方法を示しthe demoを作成
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);
}
};
:
modifySearchingFilter
私は方法で定義
$grid.jqGrid('filterToolbar', {
stringResult: true,
defaultSearch: "cn",
beforeSearch: function() {
modifySearchingFilter.call(this, ' ');
}
});
更新:Free jqGridはCustom filtering searching Operationをサポートしているため、上記のようなシナリオの実装が非常に簡単です。
このフィルタ文字列を作成する理由 フィルタ\t {"groupOp": "AND"、 "rules":[]、 "groups":[{"groupOp": "AND"、 "groups":[]、 "ルール":[{"データ": "задний"、 "op": "cn"、 "フィールド": "ent_name"}、{"データ": "аморт"、 "op": "cn"、 "field ":" ent_name "}]}]} 複雑な検索でこのフィルタ文字列を生成します フィルタ\t {" groupOp ":" AND "、" rules ":[{" field ":" ent_name "、" op " –
@DmitriyLuchkin:申し訳ありませんが、私はあなたの名前を "あなたの質問を完全に理解する。私のデモがうまく動作しないテストケースがありますか? – Oleg
@DmitriyLuchkin:あなたの問題は 'groupOp = 'OR''演算を' group'部分の 'groupOp =' AND '演算と混同したことでしょうか? – Oleg