2

我正在尝试通过具有英国日期和时间的 DataTables pluing 对表中的列进行排序,如下所示:21/09/2013 11:15

使用来自 Ronan Guiloux 的代码:

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "uk_date-pre": function ( a ) {
        if ($.trim(a) != '') {
            var frDatea = $.trim(a).split(' ');
            var frTimea = frDatea[1].split(':');
            var frDatea2 = frDatea[0].split('/');
            var x = (frDatea2[2] + frDatea2[1] + frDatea2[0] + frTimea[0] + frTimea[1] + frTimea[2]) * 1;
        } else {
            var x = 10000000000000; // = l'an 1000 ...
        }

        return x;
    },

    "uk_date-asc": function ( a, b ) {
        return a - b;
    },

    "uk_date-desc": function ( a, b ) {
        return b - a;
    }
} );

并且我还添加了此代码以自动检测它,因此我不必设置它用于哪一列:

jQuery.fn.dataTableExt.aTypes.unshift(
    function ( sData )
    {
        if (sData !== null && sData.match(/(0[1-9]|[12]\d|3[0-2])\/(0[1-9]|1[0-2])\/\d{4} (0[1-9]|1\d|2[0-3]):(0[1-9]|[1-5]\d)$/))
        {
            //console.log(sData);
            return 'uk_date';
        }
        return null;
    }
);

我遇到的问题是,虽然我可以看到正则表达式与字符串匹配,但它不是然后调用 'uk_date-pre'、'uk_date-asc' 或 'uk_date-desc' 谁能解释它为什么不起作用?

4

2 回答 2

1

玩了一段时间后,我不得不放弃正则表达式,我只是将它添加到设置中:

aoColumnDefs: [{ "sType": "datetime-uk", "aTargets": [whichCol] }]

然后,我将 whichCol var 设置为 null 或列号(如果它位于需要此 UK 排序的页面上)。

于 2013-09-25T09:34:48.133 回答
1

对于任何绊倒这个的人。

如果您更改,来自 Ronan Guilloux 的代码将按预期工作:

var x = (frDatea2[2] + frDatea2[1] + frDatea2[0] + frTimea[0] + frTimea[1] + frTimea[2]) * 1;

至:

var x = (frDatea2[2] + frDatea2[1] + frDatea2[0] + frTimea[0] + frTimea[1]) * 1;

原因是我们正在处理“21/09/2013 11:15”因此

var frTimea = frDatea[1].split(':');

只会填充 frTimea[0] 和 frTimea[1]...

于 2018-10-18T12:31:38.333 回答