tablesorter中的自定义排序顺序 - jquery

时间:2017-06-13 14:38:52

标签: tablesorter

我确实使用了tablesorter(https://mottie.github.io/tablesorter/docs/index.html) 要对我的HTML表进行排序。

我有一个排序我找不到怎么样。即

  • (4)
  • (DNS)
  • 1
  • 2
  • 3
  • 5
  • DNS

将按以下方式排序:

  • 1
  • 2
  • 3
  • (4)
  • 5
  • (DNS)
  • DNS

简而言之:()将被忽略并进行数字排序,数字首先按字母顺序排列。

我已经看过如何替换字符,(并没有像#34那样工作;空的"因为有些人也排名) 我见过的解析器要求我创建每个标头和要替换的已知值。 即:

    $.tablesorter.addParser({ 
    id: 'nummeriek', 
    is: function(s) { 
        return false; 
    }, 
    format: function(s) { 
        // format your data for normalization 
        return s.toLowerCase().replace('dns',999).replace('(dns)',999).replace('(4)',4); 
    }, 
    type: 'numeric' 
}); 

$('.tablesorter').tablesorter({ 
        headers: { 
            6: { 
                sorter:'nummeriek' 
            } 
        } 
}); 

如果我必须为每个可能的表内容执行此操作,我最终会创建数百个replace()语句。因为我得分从1到100因此(1)到(100)也是可能的......

必须有一种更简单的方法。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

默认的digit解析器"假设"用括号括起来的数字是否定的;这是在会计中指示负数的常用方法(ref)。

要解决此问题,您需要稍微修改解析器(demo

$(function() {
  $.tablesorter.addParser({
    id: 'nummeriek',
    is: function(s) {
      return false;
    },
    format: function(str) {
      // format your data for normalization
      var s = str.replace(/[()]/g, ""),
        n = parseFloat(s);
      return !isNaN(n) && isFinite(n) ? n : s;
    },
    type: 'numeric'
  });

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

注意:此解析器始终返回不带括号的非数字字符串,例如"(DNS)"将成为" dns"。我保持这种方式,所以"(dns)"条目将按照" dns"。

进行排序