Tablesorter 不排序“-”符号

Tablesorter does not sort "-" symbol

tablesorter 不适用于主题列,当列包含“-”时,例如:

Name Subject
Anton    -
Max     "dfdsrv"
Anna    "fdsf"

但是如果我添加带有规范符号的字符串,它将正常工作!

Name Subject
Anton    -
Max     "<dfdsrv>"//correctly working
Anna    "fdsf"

P.S 不幸的是,我们使用的是旧的 tablesorter 版本 2.0.5。 我该如何解决这个问题?我用“-”替换了空字符串,但它仍然不是 work.Maybe 我哪里弄错了?

textExtraction: function(node) {
      if (node.innerHTML.text == "-"){
        return " "; 
      } 
}

这是默认设置的一个已知问题。 Tablesorter 支持对文本、URI、整数、货币、浮点数、IP 地址、日期(ISO、长格式和短格式)、时间进行排序的解析器。

要解决您的问题,您应该将 tablesorter 配置为使用 text parser:

$(".tbl").tablesorter({
    headers: {
        0: { sorter:'text' }
    }
});

http://tablesorter.com/docs/#Configuration

在更复杂的情况下(例如重新格式化、替换等),一种可行的方法是使用 $.tablesorter.addParser 方法向 tablesorter 添加自定义解析器。

http://tablesorter.com/docs/example-parsers.html

这是问题的组合。

  1. textExtraction 函数需要始终 return html:
  2. 正如@TheZenCoder所说,解析器需要设置为"text";这是因为“-”位于该列的第一个单元格中。解析器被设置为 "digit" 因为它认为“-”是一个负号。

这是完整的代码 (& demo):

$('table').tablesorter({
    textExtraction: function (node) {
        var txt = node.innerHTML;
        if (txt == "-") {
            return " ";
        }
        return txt;
    },
    headers : {
        1: { sorter: 'text' }
    }
});

* 注意:如果 table 单元格中有任何制表符、空格或其他格式,例如

<td>
  -
</td>

那么您将需要 trim 结果以获得准确的比较:

var txt = $.trim( node.innerHTML );
if (txt == "-") {