排序顺序不正确
Incorrect sort order
我在基本 table 上使用 table 分拣机。 2 table headers,第一列是对以下项目进行排序:
000
00
0
000
00
0
1
2
3
etc.
与其他数据一起排序为:
0
1
10
11
12
2
我已经尝试将 class 添加到 "sorter-digits" 的每一个,但没有任何区别。还配置了 tablesorter:
$("#myTable").tablesorter({
sortList: [[1,0]],
headers: {
0: { sorter: "digit" }
1: { sorter: "digit" }
}
});
...但同样,我得到了上述结果。感觉我错过了一些明显的东西?
如果您使用的是原始表格排序器 (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, then you can add a custom textSorter
to specifically handle zeros with different lengths - 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
,而是使用 built-in sortNatural
函数 - demo
$(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);
}
}
});
});
我在基本 table 上使用 table 分拣机。 2 table headers,第一列是对以下项目进行排序:
000
00
0
000
00
0
1
2
3
etc.
与其他数据一起排序为:
0
1
10
11
12
2
我已经尝试将 class 添加到 "sorter-digits" 的每一个,但没有任何区别。还配置了 tablesorter:
$("#myTable").tablesorter({
sortList: [[1,0]],
headers: {
0: { sorter: "digit" }
1: { sorter: "digit" }
}
});
...但同样,我得到了上述结果。感觉我错过了一些明显的东西?
如果您使用的是原始表格排序器 (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, then you can add a custom textSorter
to specifically handle zeros with different lengths - 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
,而是使用 built-in sortNatural
函数 - demo
$(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);
}
}
});
});