4

我想我知道这个问题,但我不知道如何正确处理它,所以我希望这里有人遇到类似的问题并设法解决它。我所拥有的是一个包含几列的表格,除了一个之外,所有这些列都可以进行排序。下面是该列的屏幕截图及其在工作中的排序。

在此处输入图像描述

如您所见,它没有根据字母数字逻辑进行排序。我的假设是某些名称中包含字符,例如逗号的括号、方括号等。也就是说,我将如何解决这个问题,以便我可以使用数据表插件对这个字母数字进行排序?想法?

****编辑****

这是我正在使用的代码,适用于除这一列之外的所有内容。

jQuery.fn.dataTableExt.oSort['num-asc']  = function(a,b) {
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

jQuery.fn.dataTableExt.oSort['num-desc'] = function(a,b) {
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};

$(document).ready(function() {
    $('#ledger').dataTable({
        bAutoWidth: false,
        bJQueryUI : true,
        bProcessing: true,
        bServerSide: false,
        sPaginationType: "full_numbers",
        bStateSave : false,
        bUseRendered: false,
        iDisplayLength: ${entriesValue},
        sDom: mw.superadmin.datatable.relatedListDom,
        aLengthMenu: mw.superadmin.datatable.relatedListLengthMenu,
        aaSorting: [[0,'asc']],
        aoColumns: [
            null,
            { "iDataSort": 2},
            { "bVisible": false, "sType": "num"},
            { "iDataSort": 4, "bSortable": true },
            { "bVisible": false, "sType": "num"}
        ]
    });
4

4 回答 4

3

由于您显示的是链接,我猜您正在使用自定义渲染功能?

如果是这种情况,请在列定义中设置以下内容:

"bUseRendered": false

这将使表格按数据排序,而不是渲染输出。

于 2012-04-18T21:59:46.993 回答
3

我相信最好的方法是使用 aoColumnDefs。尝试这个:

"aoColumnDefs": [
   {
   "sType": "string"
   }
]


如果这不起作用,您可能需要创建自定义排序功能。请参阅此链接

于 2012-04-18T22:01:42.353 回答
0

在我的情况下,我的第一列包含图像,我发现对该列进行排序正在正确地对第二列进行排序,但是当我单击对第二列进行排序时,它的排序不正确。我通过'aTargets'禁用第一列并将'sType'设置为'null'来解决这个问题:

    "aoColumnDefs": [
        { 'bSortable': true, 'sType':"null", 'aTargets': [1, 6] },
    ]
于 2017-05-06T19:13:02.290 回答
0

如果您使用自定义渲染方法,请使用“类型”的值来区分实际数据和您的自定义视图。如下所示,

"render": function ( data, type, full, meta ) {
    if ( type === 'display' ) {
        return '<a class="btn btn-link">' + full['description'] + '</a>';                       
    }
    return full['description'];
}

在内部,数据表将类型作为“显示”传递,同时在进行排序、搜索时生成视图和其他值......等

于 2016-11-30T07:16:53.317 回答