使用jQuery DataTables自定义排序持续时间

时间:2015-06-19 20:25:04

标签: jquery sorting datatables

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

该列包含呼叫持续时间,但并不总是存在,因此我们使用N/A。列数据如下所示:

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

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

我使用jQuery DataTables 1.10.6,时刻2.9.0,我确实拥有所有数据表插件。我在表格的标题中使用data-stypeth。我也使用no config datatable 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]],
    });

1 个答案:

答案 0 :(得分:1)

使用以下代码:

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' }
       ]         
    });
});

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

样本

请参阅this jsFiddle以获取代码和演示。