Sorting JQuery表排序器逗号数字分析器不工作
这是我的问题 我目前正在使用JQuery表分类器,我在web上发现了一个逗号数字解析器。我的问题是它似乎不起作用 下面是该列的排序:Sorting JQuery表排序器逗号数字分析器不工作,sorting,jquery-plugins,tablesorter,Sorting,Jquery Plugins,Tablesorter,这是我的问题 我目前正在使用JQuery表分类器,我在web上发现了一个逗号数字解析器。我的问题是它似乎不起作用 下面是该列的排序: 4666 141666 293 341666 346 461676 这应归类为 293 346 4666 141666 341666 461676 我使用的解析器如下所示: $( function() { $.tablesorter.addParser({ id: "fancyNumber", is: function(
$( 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'}”命令,如下所述:
**编辑:**其中一列工作正常,但此列仍有问题。可能是因为它有数字和逗号分隔的数字?尝试在.tablesorter()声明中显式分配解析器
.tablesorter( { headers: { 0: { sorter:'fancyNumber' } });
正如Jared所提到的,您需要指定哪个列使用哪个解析器,如果您不知道该列的索引,那么您可以使用以下方法找到它:
var fancyIndex = $('th.fancyColumn').prevAll().length
var headers = {};
headers[fancyIndex] = {sorter:'fancyNumber'}
$("table").tablesorter({headers:headers})
对于任何遇到这个问题的人。我必须将该类添加到标题行。因此,对于我想要进行排序的任何标题,我添加了以下类:
<th class=\"{sorter: 'fancyNumber'}\">
一、 尝试以下正则表达式:/(\d{1,3})?(\,\d{3})*/如果忘记包含元数据插件,也会发生这种情况
**因为这是谷歌上的第一个搜索结果,所以发布在这里。解析器只查看第一个tbody行来检测要使用哪个解析器。我猜你的第一行没有逗号。我遇到了同样的问题,最后使用class=“{sorter:'fancyNumber'}”强制使用了我想要的解析器。这里是我所做的:
$(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'}}});
});
使用逗号和点分隔符
测试它您完全正确地认为解析器应该工作,原因是插件中存在错误。简言之,该插件认为它可以正确地对带有逗号的数字进行排序,因此使用了它的内置排序器,但却无法正确排序 有几种方法可以解决这个问题 首先,您可以(如上所述)强制使用排序函数(在插件初始化时在中或在javascript中) 其次,您可以编辑插件以优先使用自己的函数,这可以通过反转插件第220行上for循环的方向来实现 第三,您可以通过修改数字检测功能以不接受逗号(插件的第861行)或修改默认数字排序器以处理逗号(插件的第852行)来修复损坏的默认排序行为
我在tablesorter google代码页上提出了这个问题:我找到了一个适合我的解决方案。 在tablesorter.js中,修改formatFloat()函数,如下所示:
this.formatFloat = function (s) {
var i = parseFloat(s.replace(/[,]/g, ''));
return (isNaN(i)) ? 0 : i;
};
this.formatFloat = function (s) {
s = s.toString();
var i = parseFloat(s.replace(/[,]/g, ''));
return (isNaN(i)) ? 0 : i;
};
这将替换干扰排序的逗号。
找到了答案。
希望这对…有帮助 我找到了一个适合我的解决方案。在tablesorter.js中,修改formatFloat()函数,如下所示:
this.formatFloat = function (s) {
var i = parseFloat(s.replace(/[,]/g, ''));
return (isNaN(i)) ? 0 : i;
};
this.formatFloat = function (s) {
s = s.toString();
var i = parseFloat(s.replace(/[,]/g, ''));
return (isNaN(i)) ? 0 : i;
};
这将替换干扰排序的逗号。在这里找到了答案。希望这对…有帮助 因为我是如何生成我的列以及用户允许选择的列的,所以我永远不知道哪个标题在哪个标题中。我已经尝试过使用class=“{sorter:'fancyNumber'}”命令,如下所述:我可以看到。tablesorter对“fancyNumber”列使用不同的解析器吗?如果其他解析器中的一个首先被选中,那么将解析器的创建移动到其他解析器之上,这样它就可以在列上获得第一个裂纹,这是否明智呢?Jared,我怎么知道它是否使用了不同的解析器?我使用的是小型版本的分类器,所以我不能准确地把这个解析器放在前面。。。我的想法是,对于某些行,它看起来像一个数字,而对于其他行,它看起来像一个带逗号的数字。。。出于某种原因,它只是不能正常工作。以下是我将尝试的调试步骤:1)在Firebug控制台(或其他)中,确保正则表达式在列中的第一个值上触发true 2)确保替换正确工作以去掉逗号3)尝试“未统一”版本,并将解析器作为第二个(在文本之后)看看这行不行,如果行的话,那就有点麻烦了,Ducky,第二行不行了。。。它说它缺少一个;在[声明标头的位置]。@Scott现在再试一次,我忘记添加var headers={}; line@ducky,没有,仍然没有发生。一个我用了你的想法,另一个列排序不正确,开始正常工作。可能只是这个列有问题…可能是因为在同一列中有一个整数和一个逗号分隔的整数?尝试在每一行的末尾打分号。你不必这样做。headers选项允许您指定数据类型。请在那里查看。在您的选项中,您只需指定
标题:{5:'mysorter'}
还有,嘿,普雷斯托。但是当你有一个动态的列数时,这是不好的。例如,有时这个列在一个表中是第5列,而在另一个表中是第4列。通过将它直接放入TH,你可以确保它在任何地方都有效。我不喜欢指定列数数字硬编码。这就像广告宣传的那样有效,但一定要添加它他使用jquery.metadata.js lib作为指定内联选项所需的库。我想知道为什么我的class=“{sorter:'numeric'}”
不起作用;我没有输入
条目!想到这一点很明显,但一开始我没有发现。你的帖子帮助了我,谢谢!感谢这对我自己构建的疑难解答非常有帮助!我没有