这是我的问题,
我目前正在使用JQuery Table Sorter,我在网上找到了一个Comma-Digit解析器。我遇到的问题是它似乎没有起作用。
以下是列的排序方式:
这应排序为
我使用的解析器是:
$( 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
**编辑:**看起来其中一列正常工作,但此列仍有问题。也许是因为它有数字和逗号分隔的数字?
答案 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'}}});
});
使用逗号和点分隔符。
答案 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' } });
答案 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;
};
这将取代干扰排序的逗号。在这里找到答案。希望这有助于......!