Javascript jQuery Tablesorter对前导为0';s(使用解析器时:text)
我正在使用的是当前的master,我已经从更新为,以便能够使用Filter小部件。但在这样做的过程中,我遇到了一个问题,当要求使用“文本”分类器时,它似乎无法用前导0对数字进行排序 例如:Javascript jQuery Tablesorter对前导为0';s(使用解析器时:text),javascript,jquery,sorting,tablesorter,Javascript,Jquery,Sorting,Tablesorter,我正在使用的是当前的master,我已经从更新为,以便能够使用Filter小部件。但在这样做的过程中,我遇到了一个问题,当要求使用“文本”分类器时,它似乎无法用前导0对数字进行排序 例如: headers: 0: sorter: 'text' 在具有值的列上 001 一, 一, 01 一, 0001 我希望得到一个排序值 0001 001 01 一, 一, 一, 但它似乎将其解析为数字,因为前导0对排序顺序没有影响 jsFiddles: 我在这里创建了一个基本的JSFIDL
headers:
0:
sorter: 'text'
在具有值的列上
- 001
- 一,
- 一,
- 01
- 一,
- 0001
- 0001
- 001
- 01
- 一,
- 一,
- 一,
注意这是正确的,但是新的fork似乎有问题 fork of tablesorter用自然排序算法取代了基本的文本排序,因此像
01
和0001
这样的值被解析并视为相同的值
要解决此问题,可以将设置为使用基本文本排序(与原始版本相同),如下所示()
或者,您可以创建自定义解析器来修改缓存值以调整排序顺序()
谢谢@Mottie!我最终将此作为默认设置,并像一个符咒一样工作<代码>$.tablesorter.Default.textSorter=$.tablesorter.sortText我添加了一个更新的leadingZeros解析器(),其中有一个演示,显示了使用
sortText
方法的问题。它尚未发布,但可以在主分支中使用。
$(function() {
$("#tablesorter-example").tablesorter({
textSorter: {
1: $.tablesorter.sortText
},
headers: {
1: { sorter: 'text' }
}
});
});
$(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' }
}
});
});