Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting JQuery表排序器逗号数字分析器不工作_Sorting_Jquery Plugins_Tablesorter - Fatal编程技术网

Sorting JQuery表排序器逗号数字分析器不工作

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(

这是我的问题

我目前正在使用JQuery表分类器,我在web上发现了一个逗号数字解析器。我的问题是它似乎不起作用

下面是该列的排序:

  • 4666
  • 141666
  • 293
  • 341666
  • 346
  • 461676
  • 这应归类为

  • 293
  • 346
  • 4666
  • 141666
  • 341666
  • 461676
  • 我使用的解析器如下所示:

    $( 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'}”
    不起作用;我没有输入
    条目!想到这一点很明显,但一开始我没有发现。你的帖子帮助了我,谢谢!感谢这对我自己构建的疑难解答非常有帮助!我没有