我在基本表上使用tablesorter。 2个表头,第一列按如下顺序排列以下项目:
000
00
0
000
00
0
1
2
3
etc.
对于其他数据,它被排序为:
0
1
10
11
12
2
我尝试将这个类添加到"分拣机数字"它没有任何区别。还配置了tablesorter:
$("#myTable").tablesorter({
sortList: [[1,0]],
headers: {
0: { sorter: "digit" }
1: { sorter: "digit" }
}
});
...但是再一次,我得到了上述结果。感觉像我错过了一些明显的东西?
答案 0 :(得分:0)
如果您使用原始tablesorter(v2.0.5b),则可以使用自定义解析器。此解析器不是理想的,因为它为零提供负十进制值以维持所需的排序顺序。如果您的数据不包含任何负数 - demo,则不应该出现问题。
$(function() {
$.tablesorter.addParser({
id: 'zeros',
is: function() {
return false;
},
format: function(s, table) {
var number = parseFloat(s);
if (number === 0) {
// add a negative decimal place to maintain sorting
// using "5" assuming the max zero length is 5 ("00000")
number = -1/(5 - s.length);
}
return number;
},
type: 'number'
});
$('table').tablesorter({
headers: {
0: { sorter: 'zeros' }
}
});
});
如果您使用我的fork of tablesorter,则可以添加自定义textSorter
以专门处理不同长度的零 - demo。
$(function() {
$('table').tablesorter({
theme: 'blue',
textSorter: {
0: function(a, b, direction, columnIndex, table) {
x = parseFloat(a);
y = parseFloat(b);
return x === 0 && y === 0 ?
b.length - a.length : x - y;
}
}
});
});
更新:对于混合内容,请使用内置的x - y
功能 - demo
sortNatural
$(function() {
$('table').tablesorter({
theme: 'blue',
textSorter: {
0: function(a, b) {
x = parseFloat(a);
y = parseFloat(b);
return x === 0 && y === 0 ?
b.length - a.length :
$.tablesorter.sortNatural(a, b);
}
}
});
});