jQuery DataTables – 仅对数字进行排序

使用1.10.1和新的数据排序html5属性我想忽略排序顺序中的某些单元格。

我的列与数字和文本值混合在一起。 例:

100.50 USD Text 50.00 USD 

在此列上排序时,我希望忽略文本单元格。 所以降序将是100,50,Text。 升序为50,100,文字。

我可以仅使用数据排序属性来完成此操作,还是有其他方法?

我担心仅凭data-sortdata-order无法做到这一点。 无论如何,DataTables都会尝试对升序/降序进行排序,而您真正需要的是纯文本字段的两个不同排序值,使它们成为最高值或最低值。

但是,您认为可能会使用自定义排序插件吗? 请参阅以下插件,该列提取列中的任何数字,或者如果数字不存在,则将排序值设置为Number.NEGATIVE_INFINITY (排序降序)或Number.POSITIVE_INFINITY (排序升序),以便始终将纯文本列推送到底部 :

 function sortNumbersIgnoreText(a, b, high) { var reg = /[+-]?((\d+(\.\d*)?)|\.\d+)([eE][+-]?[0-9]+)?/; a = a.match(reg); a = a !== null ? parseFloat(a[0]) : high; b = b.match(reg); b = b !== null ? parseFloat(b[0]) : high; return ((a < b) ? -1 : ((a > b) ? 1 : 0)); } jQuery.extend( jQuery.fn.dataTableExt.oSort, { "sort-numbers-ignore-text-asc": function (a, b) { return sortNumbersIgnoreText(a, b, Number.POSITIVE_INFINITY); }, "sort-numbers-ignore-text-desc": function (a, b) { return sortNumbersIgnoreText(a, b, Number.NEGATIVE_INFINITY) * -1; } }); 

更新 。 代码被清理,插件现在可以对任何类型的数字进行排序,即

  • 整数,如123
  • 十进制数,如123.45
  • 负数和正数,如-123.00,+ 123
  • 科学数字,如12.3e + 10
  • 非法数字,如012345

看演示 – > http://jsfiddle.net/6qmkY/