0

JQuery のDataTablesのドキュメントは非常に貧弱です。たぶん些細な質問で申し訳ありません。

いくつかの列の文字列でテーブルをフィルター処理したい。これが私のコードです:

var str = "days";
my_table.fnFilter(str, 9);

9 列 (0 から数えて) に「日」文字列を含む行のみがあると予想しています。しかし、上記のコードでは結果が得られません

このコードを RexEx で使用しようとしました:

var regEx = "days"; 
my_table.fnFilter(regEx, 9, true);

このコード:

var regEx = "^days$";
my_table.fnFilter(regEx, 9, true);

そしてこのコード:

var regEx = ".*days.*";
my_table.fnFilter(regEx, 9, true);

すべて運が悪い。テーブルの 9 列目に「101 日」という文字列があると確信しています。私は何を間違っていますか?

更新:列にカスタムタイプがあります:

jQuery.fn.dataTableExt.oSort['days-asc'] = function (a, b) {
    var x = parseInt((trim(a) == "") ? 0 : trim(a.replace(/days/, "")));
    var y = parseInt((trim(b) == "") ? 0 : trim(b.replace(/days/, "")));
    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};

jQuery.fn.dataTableExt.oSort['days-desc'] = function (a, b) {
    var x = parseInt((trim(a) == "") ? 0 : trim(a.replace(/days/, "")));
    var y = parseInt((trim(b) == "") ? 0 : trim(b.replace(/days/, "")));
    return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};

更新 2:テーブルの 初期化オプション:

 $.my_table = $("#myTable").dataTable({
    "iDisplayLength": 10,
    "bStateSave": false,
    "bFilter": true,
    "bSort": true,
    "bAutoWidth": false,
    "oLanguage": {
        "sLengthMenu": sStdMenu + " per page"
    },
    "sPaginationType": "full_numbers",
    "sDom": 'rti<"bottom2"p><"bottom1"l',
    "aaSorting": [
        [0,'asc']
    ],
    "aoColumns": [
        { "sType": "html-trimmed" },
        { "sType": "date-direct" },
        { "sType": "date-direct" },
        { "sType": "html" },
        { "sType": "percent" },
        { "sType": "money" },
        { "sType": "money" },
        { "sType": "money" },
        { "sType": "days" },            
        { "sType": "days" },
        { "sType": "days" },
        { "sType": "days" },
        { "sType": "days" },
        { "sType": "days" },
        { "sType": "html" },
        { "sType": "html" },
        null,
        null,
        null
    ]

});
4

1 に答える 1

0

初期化コードや関数の構文に問題はありませんfnFilter。それが役立つ場合は、fnFilterすべてのパラメーターがデフォルト値に設定された関数の完全な例を次に示します (filterStringおよびを除くcolumn)。

$(document).ready(function () {
    'use strict';
    var my_table = $('#example').dataTable(),
        filterDataTable = function filterDataTable() {
            var filterString = 'days',
                column = 9,
                treatAsRegex = false,
                smartFiltering = true,
                showFilter = true,
                caseInsensitive = true;
            my_table.fnFilter(filterString, column, treatAsRegex, smartFiltering, showFilter, caseInsensitive);
        };
    $('#someElement').click(function (e) {
        filterDataTable();
        e.preventDefault();
        return false;
    });
});

また、まったく関係のないことですが、並べ替え関数は次のように簡略化できます。

jQuery.fn.dataTableExt.oSort['days-asc'] = function (a, b) {
    var x = parseInt(a, 10) || 0,
        y = parseInt(b, 10) || 0;
    return x - y;
};
jQuery.fn.dataTableExt.oSort['days-desc'] = function (a, b) {
    var x = parseInt(a, 10) || 0,
        y = parseInt(b, 10) || 0;
    return y - x;
};
于 2012-11-19T13:32:50.450 に答える