这是我的问题,

我目前正在使用 JQuery Table Sorter,并且在网上找到了一个逗号数字解析器。我遇到的问题是它似乎不起作用。

因此,该列的排序如下:

  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

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

有帮助吗?

解决方案

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

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

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

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

$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} });

其他提示

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

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

这是我所做的:

$(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

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

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

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

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

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

查看来源

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

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

$("table").tablesorter({headers:headers})

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

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

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

有几种方法可以修复它。

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top