使用 jQuery 数据表自定义排序持续时间

Custom sort durations using jQuery DataTables

我需要对 jQuery DataTables 中的列进行排序。我尝试使用 moment 插件但没有成功。

该列包含通话时长,但它并不总是存在,因此我们对这些使用 N/A。列数据如下所示:

2m 45s
1m 32s
N/A
45s
1m

我需要能够用 N/A 值小于 0 的值对这些进行排序,其余的按逻辑顺序排列

我使用 jQuery DataTables 1.10.6,moment 2.9.0,我确实拥有所有数据tables 插件。我在我的table的header中使用data-stypeth。我也使用无配置数据table init 看起来像那样

// Create DataTables User
    table = $('#summary-table').DataTable({
        'language'  : { "url": paths.lang_{{LaravelLocalization::getCurrentLocale()}} },
        'responsive':
        {
            'details':
            {
                'type': 'inline'
            }
        },
        'order': [[(nbCat + 5), 'desc']],
        'dom': '<"row"<"col-sm-12 before-table
               "<"table_controls">>r><"row"<"col-sm-12"t>><"row"<"col-sm-12"ipl>>',
        'lengthMenu': [[20, 50, 100, -1], [20, 50, 100, transAll]],
    });

解决方案

使用下面的代码:

jQuery.extend(jQuery.fn.dataTableExt.oSort, {
    "duration-pre": function (s) {        
        var duration;
        
        s = s.toLowerCase();
        
        if(s === 'n/a'){ 
            duration = -1;
            
        } else {            
            d = s.match(/(?:(\d+)m)?\s*(?:(\d+)s)?/);
            duration = parseInt(d[1] ? d[1] : 0) * 60 + parseInt(d[2] ? d[2] : 0);
        }
        
        return duration;
    }
});

$(document).ready(function (){
    var table = $('#summary-table').DataTable({
       columnDefs: [
           { targets: 0, type: 'duration' }
       ]         
    });
});

targets: 0 中的 0 更改为包含持续时间的列的索引。为了简单起见,我省略了其他 table 选项。

演示

有关代码和演示,请参阅 this jsFiddle