排序顺序不正确

时间:2017-01-25 22:25:38

标签: tablesorter

我在基本表上使用tablesorter。 2个表头,第一列按如下顺序排列以下项目:

000
00
0
000
00
0
1
2
3
etc.

对于其他数据,它被排序为:

0
1
10
11
12
2

我尝试将这个类添加到"分拣机数字"它没有任何区别。还配置了tablesorter:

$("#myTable").tablesorter({
     sortList: [[1,0]],
     headers: {
          0: { sorter: "digit" }
          1: { sorter: "digit" }
       }
});

...但是再一次,我得到了上述结果。感觉像我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:0)

如果您使用原始tablesorter(v2.0.5b),则可以使用自定义解析器。此解析器不是理想的,因为它为零提供负十进制值以维持所需的排序顺序。如果您的数据不包含任何负数 - demo,则不应该出现问题。

$(function() {

  $.tablesorter.addParser({
    id: 'zeros',
    is: function() {
      return false;
    },
    format: function(s, table) {
      var number = parseFloat(s);
      if (number === 0) {
        // add a negative decimal place to maintain sorting
        // using "5" assuming the max zero length is 5 ("00000")
        number = -1/(5 - s.length);
      }
      return number;
    },
    type: 'number'
  });

  $('table').tablesorter({
    headers: {
      0: { sorter: 'zeros' }
    }
  });

});

如果您使用我的fork of tablesorter,则可以添加自定义textSorter以专门处理不同长度的零 - demo

$(function() {

  $('table').tablesorter({
    theme: 'blue',
    textSorter: {
      0: function(a, b, direction, columnIndex, table) {
        x = parseFloat(a);
        y = parseFloat(b);
        return x === 0 && y === 0 ?
            b.length - a.length : x - y;
      }
    }
  });
});

更新:对于混合内容,请使用内置的x - y功能 - demo

,而不是返回sortNatural
$(function() {

  $('table').tablesorter({
    theme: 'blue',
    textSorter: {
      0: function(a, b) {
        x = parseFloat(a);
        y = parseFloat(b);
        return x === 0 && y === 0 ?
          b.length - a.length :
          $.tablesorter.sortNatural(a, b);
      }
    }
  });
});