gpt4 book ai didi

javascript - jQuery Tablesorter 错误地对带有前导 0 的数字进行排序(使用解析器时 : text)

转载 作者:太空宇宙 更新时间:2023-11-04 15:55:05 24 4
gpt4 key购买 nike

我正在使用https://github.com/Mottie/tablesorter当前的master ,我已从 older tablesorter 更新为以便能够使用过滤器小部件。但在这样做时,我遇到了一个问题,当要求使用“文本”排序器时,似乎无法对带有前导 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表明排序正在“工作”,但似乎去掉了前导 0,对我来说这意味着它正在按数字排序。

我已经用最新版本的 jQuery 1、2 和 3 尝试过此操作。

注意'old' Tablesorter这样做是正确的,但新的 fork 似乎有问题。

最佳答案

tablesorter 的分支用自然排序算法替换了基本的文本排序,因此像 010001 这样的值会被解析并视为相同的值。

要解决此问题,您可以设置 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' }
}
});
});

关于javascript - jQuery Tablesorter 错误地对带有前导 0 的数字进行排序(使用解析器时 : text),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42774883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com