我正在尝试使用jQuery dataTables按自定义值对数字列进行排序。我已经阅读了有关数字排序的所有主题,但是找不到适用于我的问题的解决方案。我将我的数字存储在名为sort-count
这是我的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)
显示以下输出。如您所见,它获取正确的值,它们都是数字,但它是完全随机排序。
我已经尝试了很多个小时,但却无法让它发挥作用。
答案 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 );
} );
};