使用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,文字。
我可以仅使用数据排序属性来完成此操作,还是有其他方法?
答案 0 :(得分:3)
我担心单靠data-sort
或data-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;
}
});
<强>更新即可。代码被清理,插件现在排序任何类型的数字,即
参见演示 - &gt;的 http://jsfiddle.net/6qmkY/ 强>