我正在使用https://github.com/Mottie/tablesorter的当前主人,我已从older tablesorter更新为使用过滤器小部件的能力。但是在这样做时,我遇到了一个问题,当被要求使用'文本'分拣机。
示例:
headers:
0:
sorter: 'text'
在值为
的列上我希望排序的值为
但它似乎将其解析为数字,因为前导0对排序顺序没有影响。
jsFiddles:
我在这里创建了一个基本的jsFiddle:https://jsfiddle.net/ewjg8mob/来显示我的需求。
Another jsFiddle表明排序工作正常。但似乎正在剥离领先的0,这对我来说意味着它排序为数字。
我已尝试使用最新版本的jQuery 1,2和3.
注意 'old' Tablesorter这样做是正确的,但是较新的分叉似乎有问题。
答案 0 :(得分:1)
tablesorter的fork用自然排序算法替换了基本文本排序,因此解析01
和0001
之类的值并将其视为相同的值。
要解决此问题,您可以将textSorter
option设置为使用基本文本排序 - 与原始版本相同 - 如下所示(demo)
$(function() {
$("#tablesorter-example").tablesorter({
textSorter: {
1: $.tablesorter.sortText
},
headers: {
1: { sorter: 'text' }
}
});
});
或者,您可以创建自定义解析器来修改缓存值以调整排序顺序(demo)
$(function() {
$.tablesorter.addParser({
id: 'leadingZeros',
is: function() {
return false;
},
format: function(s, table) {
var number = parseFloat(s),
str = number.toString();
if (s.length !== str.length) {
// subtract a decimal equivalent of the string length
// so "0001" sorts before "01"
number -= 0.00000001 * (s.length - str.length);
}
return number;
},
type: 'number'
});
$("#tablesorter-example").tablesorter({
headers: {
1: { sorter: 'leadingZeros' }
}
});
});