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,Text。

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

最佳答案

恐怕这不能单独使用data-sortdata-order来完成。无论如何,DataTables 都会尝试升序/降序排序,而您真正需要的实际上是纯文本字段的两个不同的排序值,使它们要么是最高值,要么是最低值。

但是,您认为您可以使用自定义排序插件来代替吗?请参阅以下插件,该插件从列中提取任何数字,或者如果数字不存在,则将排序值设置为 Number.NEGATIVE_INFINITY (降序排序)或 Number.POSITIVE_INFINITY code> (升序排序)因此纯文本列总是被推到底部:

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/

关于jQuery DataTables - 仅对数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761459/

相关文章:

javascript - 触发选择框的 onChange 事件(Jquery Chosen)

php - 数据表、Ajax 流水线

javascript - 使用多个复选框的数据表数据过滤(服务器端)

jQuery 在数据表上设置按键

mysql - 更改双周数据MYSQL的日期

jquery - 生成下载文件时出现友好的等待消息

jquery - 设置验证字段失败的标志

javascript - DataTables 过滤单元格内容而不是数据库值

jquery - 使用 jQuery :contains selector

javascript - jquery 检查有 id 总是去 else