javascript - jQuery DataTables - 当日期也是一个链接时排序不起作用

标签 javascript jquery datatable datatables

我注意到当日期也是一个链接时,英国日期排序不起作用。

示例 1. ( demo )

这里的日期是纯测试。工作完全正常。

       <tr>
            <td>01/01/01</td>
            <td>Tarik</td>
            <td>Rashad Kidd</td>
            <td>1 34 238 6239-0509</td>
        </tr>

示例 2. ( demo )

这里日期也是一个链接。根本不起作用。虽然没有抛出任何错误。

         <tr>
            <td><a href="#">01/01/01</a></td>
            <td>Tarik</td>
            <td>Rashad Kidd</td>
            <td>1 34 238 6239-0509</td>
        </tr>

我还注意到排序确实适用于任何其他元素,即使它们是链接。只有日期作为链接才是问题所在。

我正在使用以下 JS 代码:

// UK Date Sorting
jQuery.fn.dataTableExt.oSort['uk_date-asc']  = function(a,b) {
    var ukDatea = a.split('/');
    var ukDateb = b.split('/');

    var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
    var y = (ukDateb[2] + ukDateb[1] + ukDateb[0]) * 1;

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

jQuery.fn.dataTableExt.oSort['uk_date-desc'] = function(a,b) {
    var ukDatea = a.split('/');
    var ukDateb = b.split('/');

    var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
    var y = (ukDateb[2] + ukDateb[1] + ukDateb[0]) * 1;

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


$(document).ready(function() {

    $('#table').dataTable( {
        "bPaginate": true,
        "bLengthChange": true,
        "bFilter": true,
        "aoColumnDefs" : [
            { "aTargets" : ["uk-date-column"] , "sType" : "uk_date"}
        ]
    });

});

非常感谢任何帮助。

最佳答案

问题是你的排序功能被额外的 html 弄糊涂了。你应该像这样修改你的函数:

// UK Date Sorting
jQuery.fn.dataTableExt.oSort['uk_date-asc']  = function(a,b) {  
    //use text()
    var ukDatea = $(a).text().split('/');
    var ukDateb = $(b).text().split('/');

    var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
    var y = (ukDateb[2] + ukDateb[1] + ukDateb[0]) * 1;

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

jQuery.fn.dataTableExt.oSort['uk_date-desc'] = function(a,b) {
    //use text()
    var ukDatea = $(a).text().split('/');
    var ukDateb = $(b).text().split('/');

    var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
    var y = (ukDateb[2] + ukDateb[1] + ukDateb[0]) * 1;

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

在这里摆弄http://jsfiddle.net/GUb2n/

关于javascript - jQuery DataTables - 当日期也是一个链接时排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600434/

相关文章:

javascript - 将 highcharts 数据导出到 CSV 文件

javascript - 如何使用 jquery 获取当前数据属性值?

C# DataTable ItemArray 返回 '{}' - 如何测试空值?

c# - 我如何解决索引超出范围。必须为非负数且小于集合的大小。错误

javascript - 无法将推文嵌入 HTML

javascript - 如何在div内容之上添加段落

javascript - Turn.js 基于窗口宽度的显示选项

javascript - 使用自定义绑定(bind)时如何更新 Knockout ViewModel

javascript - 在 setInterval() 中重复动画?

javascript - 数据表警告 : Cannot reinitialise DataTable