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'

在具有值的列上

我希望排序后的值为

但它似乎将其解析为数字,因为前导 0 对排序顺序没有影响。

jsFiddles:

我在这里创建了一个基本的 jsFiddle:https://jsfiddle.net/ewjg8mob/ 来显示我的需要。

Another jsFiddle 以显示排序是 'working' 但似乎正在剥离前导 0,这对我来说意味着它正在排序为数字。

我已经用最新版本 jQuery 1、2 和 3 试过了。

注意 'old' Tablesorter 正确地做到了这一点,但较新的分支似乎有问题。

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

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