2

私は datatables 1.9.4 と列フィルタリング プラグインを使用しています。列のフィルタリングに「select」タグを使用すると、完全一致に対してフィルターが実行されないことを除いて、それは魅力のように機能します。ワイルドカード検索を使用していますが、これは望ましくありません。テキスト入力の代わりに選択要素を使用すると問題が解決すると思いましたが、そうではありません。

「Semester - I」を検索すると、 「Semester - I」の結果のみが表示されます。ただし、フィルターは完全一致を検索しないため、「Semester - II」「Semester - III」の一致も表示されます。

jQuery DataTable ColumnFilter プラグインを試しました。「選択」フィルター スタイルは完全一致をサポートできますか? それとhttp://code.google.com/p/jquery-datatables-column-filter/issues/detail?id=11それ。しかし、誰も私の問題を解決しませんでした。

JS コード

$('#semester').dataTable({
                    "sPaginationType": "full_numbers"
                })
                .columnFilter({
                    aoColumns: [ { type: "text"},
                             { type: "text" },
                             { type: "select", values: [ 'Year - I', 'Year - II', 'Year - III', 'Semester - I', 'Semester - II', 'Semester - III', 'Semester - IV', 'Semester - V', 'Semester - VI', 'Semester - VII  ( Integrated )', 'Semester - VIII  ( Integrated )', 'Semester - IX  ( Integrated )', 'Semester - X  ( Integrated )']},
                             { type: "text" },
                             null
                        ]

                });

他の選択肢はありますか?前もって感謝します

アップデート

私も以下を試しましたが、それも役に立ちませんでした:

if (bRegex)
      oTable.fnFilter($(this).val(), iColumn, bRegex);
else
      oTable.fnFilter(unescape("^"+$(this).val()+"$"), iColumn, true);
4

3 に答える 3

4

出来上がり!一連の試行錯誤の試みを通して、自分でそれを理解しました。同様の問題を抱えている人のために、ここに解決策があります:

プラグインファイル内select.change(function () {})で、これを変更します。

if (bRegex)
  oTable.fnFilter($(this).val(), iColumn, bRegex);
else
  oTable.fnFilter(unescape($(this).val()), iColumn);

if (bRegex)
  oTable.fnFilter($(this).val(), iColumn, bRegex);
else
  oTable.fnFilter(unescape("^"+$(this).val()+"$"), iColumn, true, false);
于 2012-09-24T09:12:15.123 に答える
1

DataTableデモのマルチフィルター

var asInitVals = new Array();

$(document).ready(function() {
    var oTable = $('#example').dataTable( {
        "oLanguage": {
            "sSearch": "Search all columns:"
        }
    } );

    $("tfoot input").keyup( function () {
        /* Filter on the column (the index) of this element */
        oTable.fnFilter( this.value, $("tfoot input").index(this) );
    } );



    /*
     * Support functions to provide a little bit of 'user friendlyness' to the textboxes in 
     * the footer
     */
    $("tfoot input").each( function (i) {
        asInitVals[i] = this.value;
    } );

    $("tfoot input").focus( function () {
        if ( this.className == "search_init" )
        {
            this.className = "";
            this.value = "";
        }
    } );

    $("tfoot input").blur( function (i) {
        if ( this.value == "" )
        {
            this.className = "search_init";
            this.value = asInitVals[$("tfoot input").index(this)];
        }
    } );
} );

上記のコードでは、エンドユーザーがどのデータがフィルタリングされているかを確実に把握できるようにサポート関数が提供されていることに注意してください。fnFilter()は、ここでのプライマリインポートの関数です。

// after creating the table and getting the table object...

var oTable = $('#some_id').dataTable();

// ...you can use it to get a settings object...

var oSettings = oTable.fnSettings();

// ...then you can do things with the settings object

oSettings.aoPreSearchCols[ iCol ].sSearch = "^\\s*"+'1'+"\\s*$";
oSettings.aoPreSearchCols[ iCol ].bRegex = false;
oSettings.aoPreSearchCols[ iCol ].bSmart= false;
于 2012-09-24T08:54:03.603 に答える
0

受け入れられた回答を使用しましたが、ドロップダウンを変更してからデフォルト値に戻すと、結果が得られません。私の推測では、「」で正確なテキスト検索を実行しようとしていて、何も見つからないということです。私はこの変更を行いましたが、私にとってはうまくいっているようです。

if ($(this).val() == "")
    oTable.fnFilter(unescape($(this).val()), iColumn, false, false, false, false);
else {
    if (bRegex)
       oTable.fnFilter($(this).val(), iColumn, bRegex, false, false, false); 
    else
       oTable.fnFilter(unescape("^" + $(this).val() + "$"), iColumn, true, false, false, false); 
    }
于 2013-12-13T19:35:43.440 に答える