【问题标题】:custom sort order in tablesorter - jquerytablesorter中的自定义排序顺序 - jquery
【发布时间】:2025-11-26 14:05:01
【问题描述】:

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

我有一种排序方法,我也找不到。即。

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

将被排序为:

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

简而言之:() 将被忽略并进行数字排序,首先是数字,然后是字母。

我已经看到了如何替换字符,(也不能像某些等级那样“空”) 到目前为止,我看到的解析器要求我创建每个标头和要替换的已知值。 即:

    $.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)也是可能的......

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

【问题讨论】:

    标签: tablesorter


    【解决方案1】:

    默认的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”一样排序。

    【讨论】:

    • 现在太棒了。谢谢!
    • 我剩下的一件事是所涉及的标头数量。由于这是一个单列表,我也可以轻松地拥有 2、8、12 个可变数量的列。我尝试使用在这里找到的 addClass 方法:*.com/questions/9014962/… 但我无法让它适用于所有列。我错过了什么吗?
    • 糟糕,抱歉,我错过了你的问题。在 headers 选项中,您可以使用 jQuery 选择器来定位列而不是从零开始的索引 - headers: { '.nummeriek': { sorter: 'nummeriek' } } (example)。或者,将sorter-nummeriek 类添加到需要它的每一列。