您需要为数据表提供一组新的排序函数,然后添加一个aTypes
函数来自动分配相应的数据类型(例如格式化数字) - http://datatables.net/release-datatables/examples/plug-ins/排序插件.html
这里的棘手之处在于 jquery_pivot.js(与 pivot.js 一起提供)使用不间断空格点 (
) 表示空值(https://github.com/rjackson/pivot.js/blob/master/jquery_pivot.js #L347)。我建议 jquery_pivot.js 只是一个建议的 UI 实现,您应该可以为您的应用程序自由修改它;但是,如果您不想修改它,则会留下两种可能不受欢迎的行为:
- 如您所见,dataTables 的自动类型检测会遍历
并且将列视为字母数字进行排序。
- 即使您使用它来检测数字排序,空值通常也会被视为集合中的最小值或最大值。在我的应用程序中,我更喜欢这种
NULLS LAST
方法(即,无论升序/降序排序如何,它们总是出现在表格的末尾)。
我的解决方案远非最优雅的,但这是我的代码:
排序功能:
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"formatted-num-pre": function ( a ) {
a = (a===' ') ? NaN : a.replace( /[^\d\-\.]/g, "" );
return parseFloat( a );
},
"formatted-num-asc": function ( a, b ) {
if(isNaN(a)) return 1;
if(isNaN(b)) return -1;
return a-b;
},
"formatted-num-desc": function ( a, b ) {
if(isNaN(a)) return 1;
if(isNaN(b)) return -1;
return b-a;
}});
类型检测:
jQuery.fn.dataTableExt.aTypes.unshift(
function (data) {
return (data.charAt(0)==='$'||data===' ')?'formatted-num':null;
});
希望能帮助到你!