jQuery Tablesorter错误地用前导0排序数字(当使用解析器:文本时)

时间:2017-03-13 22:51:48

标签: javascript jquery sorting tablesorter

我正在使用https://github.com/Mottie/tablesorter的当前主人,我已从older tablesorter更新为使用过滤器小部件的能力。但是在这样做时,我遇到了一个问题,当被要求使用'文本'分拣机。

示例:

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这样做是正确的,但是较新的分叉似乎有问题。

1 个答案:

答案 0 :(得分:1)

tablesorter的fork用自然排序算法替换了基本文本排序,因此解析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' }
    }
  });
});