2

这是我的问题,

我目前正在使用 JQuery Table Sorter,并且在网上找到了 Comma-Digit 解析器。我遇到的问题是它似乎不起作用。

因此,这是该列的排序方式:

  1. 4,666
  2. 141,666
  3. 293
  4. 341,666
  5. 346
  6. 461,676

这应该排序为

  1. 293
  2. 346
  3. 4,666
  4. 141,666
  5. 341,666
  6. 461,676

我正在使用的解析器是这样的:

$( function() { 

    $.tablesorter.addParser({
        id: "fancyNumber",
        is: function(s) {
            return /^[0-9]?[0-9,\.]*$/.test(s);
        },
        format: function(s) {
            return $.tablesorter.formatFloat(s.replace(/,/g, ''));
        },
        type: "numeric"
    });
}); 

我只是不知道我做错了。我是不是加载错了?解析器错了吗?我在这里需要真正的帮助,并且已经为这个问题苦苦挣扎了一段时间。

编辑:由于我如何生成我的列和允许用户选择的列,我永远不会知道哪个标题在哪个不在。我曾尝试使用此处所述的 class="{sorter: 'fancyNumber'}" 命令:http ://tablesorter.com/docs/example-meta-parsers.html

**编辑:**看起来其中一列工作正常,但此列仍有问题。也许是因为它有数字和逗号分隔的数字?

4

10 回答 10

10

对于遇到这个问题的任何人。我必须将类添加到我的标题行。因此,对于我想要排序的任何标题,我添加了这个类:

<th class=\"{sorter: 'fancyNumber'}\">

默认情况下,这会打开分拣机,使其运行良好。

是什么让我意识到我的错误是像这样打开调试器。

$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} });
于 2009-05-18T18:00:07.710 回答
3

如果您忘记包含元数据插件,也会发生这种情况

** 由于这是 Google 上的第一个搜索结果,因此在此处发布。

于 2009-06-10T14:49:07.360 回答
2

这是我所做的:

$(document).ready(function() {
      $.tablesorter.addParser({
        id: 'fancyNumber',
        is:function(s){return false;},
        format: function(s) {return s.replace(/[\,\.]/g,'');},
        type: 'numeric'
    });
    $("table").tablesorter({headers: {0: {sorter: 'fancyNumber'}}});
});

使用逗号和点分隔符。

测试它http://jsbin.com/equci5

于 2011-06-09T06:51:54.583 回答
2

我找到了一个适合我的解决方案。在tablesorter.js中,修改formatFloat()函数如下:

this.formatFloat = function (s) {
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

这将替换干扰排序的逗号。在这里找到了答案。希望这可以帮助...!

于 2015-12-02T14:53:05.153 回答
0

尝试在 .tablesorter() 声明中显式分配解析器。

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

查看源代码

于 2009-05-18T03:16:06.020 回答
0

正如 Jared 所提到的,您需要指定哪个列使用哪个 Parser,如果您不知道该列的索引,那么您可以使用以下方法找到它:

var fancyIndex = $('th.fancyColumn').prevAll().length
var headers = {};
headers[fancyIndex] = {sorter:'fancyNumber'}

$("table").tablesorter({headers:headers})
于 2009-05-18T14:38:55.027 回答
0

我,试试这个正则表达式:/(\d{1,3})?(\,\d{3})*/

于 2009-06-09T16:34:10.120 回答
0

解析器只查看第一个 tbody 行来检测使用哪个解析器。我猜你的第一行没有任何逗号。我遇到了同样的问题,最后只是强制使用我想要的解析器,使用 class="{sorter: 'fancyNumber'}"

于 2009-07-06T23:49:32.320 回答
0

解析器应该可以工作是完全正确的,原因是插件中的错误。简而言之,插件认为它可以正确地对带有逗号的数字进行排序,因此使用其内置的排序器,但随后无法正确排序。

有几种方法可以修复它。

首先,您可以(如您上面建议的那样)强制使用您的排序功能(在插件初始化时在 javascript 中或在 javascript 中)。

其次,您可以编辑插件以优先使用您自己的功能,这可以通过反转插件第 220 行的 for 循环的方向来实现。

第三,您可以通过修改数字检测功能以不接受逗号(插件的第 861 行)或修改默认数字排序器以处理逗号(插件的第 852 行)来修复损坏的默认排序行为。

我在 tablesorter google 代码页上提出了这个问题:http ://code.google.com/p/tablesorter/issues/detail?id=6

于 2011-12-21T01:48:03.853 回答
0

我找到了一个适合我的解决方案。在tablesorter.js中,修改formatFloat()函数如下:

this.formatFloat = function (s) {
            s = s.toString();
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

这将替换干扰排序的逗号。在这里找到了答案。希望这可以帮助...!

于 2017-05-11T05:06:06.100 回答