aaSorting无法识别使用aoColumns定义的自定义排序

时间:2012-05-08 14:47:02

标签: sorting datatables

这是我的JS。排序时间为hh:mm格式。当我运行它时,我得到错误: oSort [(sDataType?sDataType:“string”)+“ - ”+ aaSort [i] [1]]不是函数我试图排序我声明排序的列的默认值。对前两列或最后一列进行排序有效但当我尝试默认为任何其他列时它不喜欢。似乎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));
};

1 个答案:

答案 0 :(得分:3)

几乎不好意思发布这个,但如果它对其他人有帮助,那就值得了。简单的解释:getTimeValue和jQuery.fn需要在设置DataTable的调用之后进行初始化,所以我需要做的就是在$(document).ready(function()之前移动这三个函数。我是JS的新手但是这个在objective-c中也是常见的编程错误.blh。