jQuery DataTables - 仅对数字进行排序

时间:2014-07-15 14:54:28

标签: jquery datatables jquery-datatables

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

我的专栏与数字和文字值混合在一起。例如:

<tr><td data-sort="100.50">100.50 USD</td></tr>
<tr><td data-sort="">Text</td></tr>
<tr><td data-sort="50.00">50.00 USD</td></tr>

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

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

1 个答案:

答案 0 :(得分:3)

我担心单靠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

参见演示 - &gt;的 http://jsfiddle.net/6qmkY/