2016-04-06 1 views
3

私は、ユーザーがフィルタリングするテキストを強調表示したときに検索を提供するグリッドを持っています。無料のjqGridでonCellSelectで選択した検索フィルタを取得するにはどうすればよいですか?

onCellSelectは次のようになります。

onCellSelect: function(row, col, content, event) { 
    var cm = grid.jqGrid("getGridParam", "colModel"); 
    if (window.getSelection) { 
     selection = window.getSelection(); 
    } else if (document.selection) { 
     selection = document.selection.createRange(); 
    } 
    selectionColumn = cm[col].name; 
    selection.toString() !== '' && $("#gs_"+selectionColumn).val(selection.toString()); 
    console.log($("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper')); 
    if(selection.toString() != '') 
    { 
     grid[0].triggerToolbar(); 
    } 

} 

今、私は私がカスタマイズされているいくつかの検索演算子を持っているし、グリッドでそれを使用して:

searchoptions:{sopt:["cn",'mc','mn',"eq","ne","lt","le","gt","ge","bw","ew","nc"]} 

mcmncustomSortOperationsの一部であります。

私が欲しいのは、ユーザーがグリッド内の特定のセル内のテキストを選択したときに、どの検索フィルタが使用されたかを検出したい場合です。たとえば、デフォルトで検索フィルタはcnです。

$("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper') 

を、それは私にデフォルトcn毎回を与える:

私はこれを試してみました。

私は、しかし、むしろ選択された正確な検索演算子を取得するjqgrid方法がある

$("a.soptclass[data-colname='"+selectionColumn+"']").text() 

eqためcnのために私に~のようなシンボリック名を与えますリンク、==内のテキストを得ることができますか?すなわちcneqneleなど

作業のデモが必要な場合は私が知っていると私は質問を更新しますしてください。

更新日:DEMO。ライン659と660で

は私が言い換えれば$("a.soptclass[data-colname='"+selectionColumn+"']").text()

が、私は、私はまだフルではない、あなたが実装する正確な何の行動を理解しonCellSelect

+0

私はあなたを正しく理解しているかどうかはわかりません。コールバックの中で '$(" a.soptclass [data-colname = '"+ selectionColumn +"'] ")のような式を使用しようとしました。テストケースでいくつかのデモを準備できますか?私があなたがしたいことを正確に理解するなら、私はあなたを助けるでしょう。 – Oleg

+0

@Oleg私はデモ[ここ](http://jsfiddle.net/jbksad8e/)を用意しました。時間があるときに見てください。 –

答えて

1

内の選択した検索演算子をしたい、このコールバックを使用していますが、それはそうです

onCellSelect: function(row, col, content, event) { 
    var p = $(this).jqGrid("getGridParam"); 
    var hDiv = p.frozenColumns === true && p.colModel[col].frozen === true ? 
       this.grid.fhDiv : this.grid.hDiv; 
    var $elem = $(hDiv).find("#gs_" + $.jgrid.jqID(p.id + "_" + p.colModel[col].name)); 
    var oper = $elem.parent().prev().children("a").data("soper"); 
    ... 
} 

$elemは、現在の空きjqGrid実装の標準ID動作を使用します(ない01:あなたは、次のとonCellSelectコードを起動しないことができますのオプションが指定されています)。要素$elemは、フィルタツールバーの<input>または<select>要素です。 $elem(selection)を使用して値を変更できます。 oper変数には、現在選択されている検索操作が含まれています。データにアクセスするには、.attr("data-soper")の代わりに.data("soper")を使用する必要があります。

私はそれがあなたが現在欠けているものであることを願っています。

+0

こんにちは@Oleg、これはまさに私が欲しかったものです。このような要件の目的は、今現在行われているテキストの選択について検索を提供できるようにすることです。しかし、私は複数のフィルタを含んでいないフィルタを実装したかったのです。したがって、ユーザーはフィルタを最初に選択してから除外する文字列を選択できる必要があります。ですから、私はどのような種類のフィルターが選択されたのかを検出する必要がありました。これは素晴らしいことです。もう一度ありがとうございます。 –

+0

@DipenShah:ようこそ!選択をマウスの右クリックと組み合わせて、列に対して許可された検索操作からコンテキストメニューを作成し、使用後に強制的にコンテキストメニューで選択を行うことができます。マウスの右クリックなしで(選択直後に)同じコンテキストメニューを表示することを検討できます。ユーザーは選択した単語を表示し、検索操作を直接選択できます。 – Oleg

+0

あなたの提案をありがとうが、これはユーザーが現在起こっているものの2倍をクリックするようになります。ほとんどの場合、ユーザーは通常のフィルタを1回のクリックで行うことができます。しかし、私がコンテキストメニューなどを提供していれば、その上にもう一度クリックして欲しくないものを追加します。 –

関連する問題