jQuery dataTables自定义afnSortData函数排序数字

时间:2013-10-03 13:04:02

标签: jquery sorting datatables numerical

我正在尝试使用jQuery dataTables按自定义值对数字列进行排序。我已经阅读了有关数字排序的所有主题,但是找不到适用于我的问题的解决方案。我将我的数字存储在名为sort-count

的jQuery数据属性中

这是我的dataTables初始化:

$('.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)显示以下输出。如您所见,它获取正确的值,它们都是数字,但它是完全随机排序。

output of console log

我已经尝试了很多个小时,但却无法让它发挥作用。

1 个答案:

答案 0 :(得分:3)

... 7小时后......

当您使用带有dataTables的较新版本的jQuery时,会出现此错误。显然,返回的选择现在由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 );
    } );
};