1

これは私のJSです。並べ替えは、hh:mm 形式の時間です。実行すると、次のエラーが表示されます: oSort[(sDataType ? sDataType : "string") + "-" + aaSort[i][1]] は関数ではありません。ソートを宣言します。最初の 2 列または最後の列での並べ替えは機能しますが、他の列のいずれかにデフォルト設定しようとすると気に入りません。DataTable は、初期化中にこれらの列の sDataType が何であるかを理解するのに苦労しているようです。

<script type="text/javascript">

$(document).ready(function() {
    $('#example').dataTable({

        "bJQueryUI": true,
        "iDisplayLength": 50,
        "aoColumns": [
            null,
            null,
            { "sType": 'string-case' },
            { "sType": 'string-case' },
            { "sType": 'string-case' },
            { "sType": 'string-case' },
            null
        ],
        "aaSorting": [[ 2, 'desc']]
     } );
} );

function getTimeValue(x) {
    var time = x.match(/(\d+)(?::(\d\d))?\s*(P?)/);
    var h = parseInt(time[1],10) + (time[3] ? 12 : 0);
    if(!time[3] && parseInt(time[1],10)==12) h = 0;
    if(time[3] && parseInt(time[1],10)==12) h = 12;
    return h * 60 + ( parseInt(time[2],10) || 0 );
}

/* Define two custom functions (asc and desc) for string sorting */
jQuery.fn.dataTableExt.oSort['string-case-asc']  = function(x,y) {

    x = getTimeValue(x);
    y = getTimeValue(y);

    return ((x < y) ? -1 : ((x > y) ?  1 : 0));

};

jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) {

    x = getTimeValue(x);
    y = getTimeValue(y);

    return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};

4

1 に答える 1

3

これを投稿するのはほとんど恥ずかしいですが、他の人の助けになるなら、それだけの価値があります. 簡単な説明: getTimeValue と jQuery.fn は、DataTable をセットアップする呼び出しの前に初期化する必要があるため、これら 3 つの関数を $(document).ready(function() の前に移動するだけで済みました。JS は初めてですが、これはObjective-C でもよくあるプログラミング エラーです。

于 2012-05-09T15:41:49.777 に答える