2012-01-21 74 views
3

ツールバーの検索を使用します。ある列に対して複数の単語を検索できますか?区切り記号はスペースで、検索はLike演算子を使用して行う必要があります。結果として、検索は、検索文字列内のすべての単語を満たしたすべての行を、行のフィールドにどのような順序で置いても返す必要があります。たとえば、「Product Name」という列があり、商品名に「lever」という単語が含まれ、「left」という単語が含まれているすべての行を検索したいとします。JQGridツールバー検索:列の複数の単語を検索

答えて

11

興味深い質問!

enter image description here

対応するコードである:

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 jqGridCustom filtering searching Operationをサポートしているため、上記のようなシナリオの実装が非常に簡単です。

+0

このフィルタ文字列を作成する理由 フィルタ\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 " –

+0

@DmitriyLuchkin:申し訳ありませんが、私はあなたの名前を "あなたの質問を完全に理解する。私のデモがうまく動作しないテストケースがありますか? – Oleg

+0

@DmitriyLuchkin:あなたの問題は 'groupOp = 'OR''演算を' group'部分の 'groupOp =' AND '演算と混同したことでしょうか? – Oleg

関連する問題