使用 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-sort
或data-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/