JQuery TableSorter逗号数字解析器无法正常工作

时间:2009-05-18 03:09:00

标签: sorting jquery-plugins tablesorter

这是我的问题,

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

以下是列的排序方式:

  1. 4666
  2. 141666
  3. 293
  4. 341666
  5. 346
  6. 461676
  7. 这应排序为

    1. 293
    2. 346
    3. 4666
    4. 141666
    5. 341666
    6. 461676
    7. 我使用的解析器是:

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

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

10 个答案:

答案 0 :(得分:10)

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

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

这默认打开了分拣机,使其工作得很好。

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

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

答案 1 :(得分:3)

如果您忘记包含元数据插件

,也会发生这种情况

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

答案 2 :(得分: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

答案 3 :(得分:2)

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

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

这将取代干扰排序的逗号。 找到了答案here。 希望这有助于......!

答案 4 :(得分:0)

尝试在.tablesorter()声明中明确指定解析器。

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

See the source

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

有几种方法可以解决它。

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

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

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

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

答案 9 :(得分:0)

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

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

这将取代干扰排序的逗号。在这里找到答案。希望这有助于......!