1

这是我的 JS。排序是 hh:mm 格式的时间。当我运行它时,我得到了错误:oSort[(sDataType ? sDataType : "string") + "-" + aaSort[i][1]] is not a function我试图默认为一个列排序声明排序。对前两列或最后一列进行排序是可行的,但是当我尝试默认为任何其他列时它不喜欢。似乎 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 之前进行初始化,所以我需要做的就是将这三个函数移到 $(document).ready(function() 之前。我是 JS 新手,但是这个也是objective-c中常见的编程错误。bleh。

于 2012-05-09T15:41:49.777 回答