Tablesorter排序逗号分隔数字列不正确

时间:2017-10-09 19:55:40

标签: jquery sorting tablesorter

第一次使用jQuery:

我正在使用tablesorter对表格进行排序。它的排序数字很奇怪。以下是按降序排序的示例: enter image description here

以下是按升序排序的示例 enter image description here

我尝试了一些操作,例如将“{sorter:'digit'}”类添加到元素并添加left padding,但不确定为什么会发生这样的事情。项目中的另一个表与tablesorter完美配合。

我的代码如下:

 $('#timeSeriesTable' + this.chartId).tablesorter({
    widgets: ["filter", "zebra"],
    widgetOptions: {
        // if true, a filter will be added to the top of each table column;
        // disabled by using -> headers: { 1: { filter: false } } OR add class="filter-false"
        // if you set this to false, make sure you perform a search using the second method below
        filter_columnFilters: true,

        // Hide filter boxes by default.
        filter_hideFilters: true,

        // Set this option to false to make the searches case sensitive
        filter_ignoreCase: true,

        // if true, search column content while the user types (with a delay)
        filter_liveSearch: true,

        // Use the $.tablesorter.storage utility to save the most recent filters (default setting is false)
        filter_saveFilters: false,

        // Delay in milliseconds before the filter widget starts searching; This option prevents searching for
        // every character while typing and should make searching large tables faster.
        filter_searchDelay: 300,

        // Applies style to columns
        zebra: ["normal-row", "alt-row"]
    },
    sortList: this.sortingList
});

感谢您的帮助。

更新:我确实发现排序基本上忽略了逗号之后的任何数字。我看到了类似的问题here并尝试添加自定义解析器,但它似乎仍无法正常工作。

采取的步骤:  1.添加自定义解析器

$.tablesorter.addParser({
        id: "humanReadableNumber",
        is: function (s) {
          return /^[\d,]+$/.test(s);
        }, format: function (s) {
          return s.replace(/,/g, ''); 
        }, type: "numeric"
    });  
  1. 告诉标题使用此解析器:

    $(“#timeSeriesTable0”)。tablesorter({headers:{1:{sorter:'humanReadableNumber'}}});

  2. 它仍然不起作用。我在这里错过了什么吗?

    按升序排序的列示例,这清楚地显示了对每个数字中逗号之前的数字进行排序:

    enter image description here

1 个答案:

答案 0 :(得分:0)

回答此问题以防其他人受益:

我最终添加了一个解析器来处理逗号分隔的数字,然后将其作为类添加到<td>元素中。

自定义解析器代码:

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

以下是将上述解析器添加到我的<td>元素中的代码:

 td.addClass("sorter-commaSeparatedNumber");