2

我正在尝试让 jQuery dataTables 按自定义值对我的数字列进行排序。我已经阅读了有关数字排序的所有主题,但还没有找到解决我的问题的有效解决方案。我将我的数字存储在一个名为的 jQuery 数据属性中sort-count

这是我的数据表初始化:

$('.wp-list-table').dataTable({
    "aoColumns": [
        null,
        null,
        null,
        { "sType": "numeric", "sSortDataType": "numeric-data-attribut" },
        { "sType": "numeric", "sSortDataType": "numeric-data-attribut" },
        { "bSortable": false, "bSearchable": false },
    ],
    "bJQueryUI":true,
    "bPaginate":true,
    "sPaginationType":"full_numbers"
});

这是我的自定义 afnSortData 函数,用于在排序之前捕获值:

jQuery.fn.dataTableExt.afnSortData['numeric-data-attribut'] = function ( oSettings, iColumn )
{
    var aData = [];
    jQuery( 'td:eq('+iColumn+')', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
        aData.push( parseInt( jQuery(this).attr('data-sort-count'), 10 ) );
    } );

    console.log(aData);

    return aData;
};

console.log(aData)在列上多次单击以对其进行排序时,将显示以下输出。如您所见,它获取正确的值,它们都是数字,但它完全随机地对它们进行排序。

控制台日志的输出

我已经尝试了很多小时,但无法让它工作。

4

1 回答 1

3

... 7 小时后 ...

这是当您将较新版本的 jQuery 与 dataTables 一起使用时发生的错误。显然,返回的选择现在按 DOM出现排序,而不是按 _fnGetTrNodes 函数返回的数组中元素的顺序。

dataTables 文档中使用自定义 afnSortData 函数的示例已过时,不适用于较新的 jQuery 版本。

工作版本如下所示:

jQuery.fn.dataTableExt.afnSortData['numeric-data-attribut'] = function ( oSettings, iColumn )
{
    return jQuery.map( oSettings.oApi._fnGetTrNodes(oSettings), function (tr) {
        var v = jQuery( 'td:eq('+iColumn+')', tr);
        return parseInt( jQuery(v).attr('data-sort-count'), 10 );
    } );
};
于 2013-10-03T20:21:21.980 回答