jQuery Tablesorter 错误地用前导 0 对数字进行排序(使用解析器时:文本)
jQuery Tablesorter incorrectly sorting digits with leading 0's (when using parser: text)
我正在使用 https://github.com/Mottie/tablesorter, which I've updated to from the older tablesorter 的当前大师来使用过滤器小部件。但是在这样做的过程中,我 运行 遇到了一个问题,当被要求使用 'text' 排序器时,它似乎无法对前导 0 的数字进行排序。
示例:
headers:
0:
sorter: 'text'
在具有值的列上
- 001
- 1
- 1
- 01
- 1
- 0001
我希望排序后的值为
- 0001
- 001
- 01
- 1
- 1
- 1
但它似乎将其解析为数字,因为前导 0 对排序顺序没有影响。
jsFiddles:
我在这里创建了一个基本的 jsFiddle:https://jsfiddle.net/ewjg8mob/ 来显示我的需要。
Another jsFiddle 以显示排序是 'working' 但似乎正在剥离前导 0,这对我来说意味着它正在排序为数字。
我已经用最新版本 jQuery 1、2 和 3 试过了。
注意 'old' Tablesorter 正确地做到了这一点,但较新的分支似乎有问题。
tablesorter 的分支用自然排序算法替换了基本的文本排序,因此像 01
和 0001
这样的值被解析并被视为相同的值。
要解决此问题,您可以设置 textSorter
option to use a basic text sort - the same as the original version - as follows (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' }
}
});
});
我正在使用 https://github.com/Mottie/tablesorter, which I've updated to from the older tablesorter 的当前大师来使用过滤器小部件。但是在这样做的过程中,我 运行 遇到了一个问题,当被要求使用 'text' 排序器时,它似乎无法对前导 0 的数字进行排序。
示例:
headers:
0:
sorter: 'text'
在具有值的列上
- 001
- 1
- 1
- 01
- 1
- 0001
我希望排序后的值为
- 0001
- 001
- 01
- 1
- 1
- 1
但它似乎将其解析为数字,因为前导 0 对排序顺序没有影响。
jsFiddles:
我在这里创建了一个基本的 jsFiddle:https://jsfiddle.net/ewjg8mob/ 来显示我的需要。
Another jsFiddle 以显示排序是 'working' 但似乎正在剥离前导 0,这对我来说意味着它正在排序为数字。
我已经用最新版本 jQuery 1、2 和 3 试过了。
注意 'old' Tablesorter 正确地做到了这一点,但较新的分支似乎有问题。
tablesorter 的分支用自然排序算法替换了基本的文本排序,因此像 01
和 0001
这样的值被解析并被视为相同的值。
要解决此问题,您可以设置 textSorter
option to use a basic text sort - the same as the original version - as follows (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' }
}
});
});