排序顺序不正确

Incorrect sort order

我在基本 table 上使用 table 分拣机。 2 table headers,第一列是对以下项目进行排序:

000
00
0
000
00
0
1
2
3
etc.

与其他数据一起排序为:

0
1
10
11
12
2

我已经尝试将 class 添加到 "sorter-digits" 的每一个,但没有任何区别。还配置了 tablesorter:

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

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

如果您使用的是原始表格排序器 (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, then you can add a custom textSorter to specifically handle zeros with different lengths - 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,而是使用 built-in sortNatural 函数 - demo

$(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);
      }
    }
  });
});