JQuery TableSorter 逗号数字解析器不工作
-
22-08-2019 - |
题
这是我的问题,
我目前正在使用 JQuery Table Sorter,并且在网上找到了一个逗号数字解析器。我遇到的问题是它似乎不起作用。
因此,该列的排序如下:
- 4,666
- 141,666
- 293
- 341,666
- 346
- 461,676
这应该排序为
- 293
- 346
- 4,666
- 141,666
- 341,666
- 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'}}});
});
使用逗号和点分隔符。
我找到了一个适合我的解决方案。在tablesorter.js中,修改 格式浮点() 函数如下:
this.formatFloat = function (s) {
var i = parseFloat(s.replace(/[,]/g, ''));
return (isNaN(i)) ? 0 : i;
};
这将替换干扰排序的逗号。找到了答案 这里。希望这可以帮助...!
正如 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;
};
这将替换干扰排序的逗号。在这里找到了答案。希望这可以帮助...!