Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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
jQuery tablesorter-连字符和带小数(浮点)的数字一起导致排序问题_Jquery_Tablesorter - Fatal编程技术网

jQuery tablesorter-连字符和带小数(浮点)的数字一起导致排序问题

jQuery tablesorter-连字符和带小数(浮点)的数字一起导致排序问题,jquery,tablesorter,Jquery,Tablesorter,要求 我的表可以有如下值- 1.00 0.00 23.10 - 35.00 - 22.00 0.00 0.00 我希望它像这样排序(所有连字符都应该在末尾)- 甚至这样也可以(开头的所有连字符,至少它们是独立的)—— 我所做的 我使用的是这样一个自定义分类器(这是我们在项目中使用的分类器,对于整数和十进制数,也就是浮点类型,它工作得非常好)—— 这样称呼它- $("#"+report_type).tablesorter({ indexing: true,

要求
我的表可以有如下值-

1.00
0.00
23.10
-
35.00
-
22.00
0.00
0.00
我希望它像这样排序(所有连字符都应该在末尾)-

甚至这样也可以(开头的所有连字符,至少它们是独立的)——

我所做的
我使用的是这样一个自定义分类器(这是我们在项目中使用的分类器,对于整数和十进制数,也就是浮点类型,它工作得非常好)——

这样称呼它-

$("#"+report_type).tablesorter({
                    indexing: true,
                    textExtraction: 'complex',
                    headers : 1: {
                                        { sorter: 'formattedNumbers' },
                                    },
                    widgets :['zebra'],
                    sortList:[[0,0]]
                });
0.00
1.00
22.00
0.00
-
23.10
-
35.00
0.00
-
我得到的结果
但我得到了不可预测的结果。除0.00和连字符(-)之外的数字在它们之间正确排序,但一些0.00和连字符仍然随机分散。像这样-

$("#"+report_type).tablesorter({
                    indexing: true,
                    textExtraction: 'complex',
                    headers : 1: {
                                        { sorter: 'formattedNumbers' },
                                    },
                    widgets :['zebra'],
                    sortList:[[0,0]]
                });
0.00
1.00
22.00
0.00
-
23.10
-
35.00
0.00
-
我的想法


我们需要更改自定义分类器内部的逻辑,以便处理连字符。我试着按照中的建议寻找自然排序,但没有找到任何像我们的“FormattedNumber”这样的工作自定义排序器

tablesorter的默认sorter方法将为您提供

0.00
0.00
0.00
1.00
22.00
23.10
35.00
-
-

请看这里:

我不明白取得这样的结果的目的:

1.00
22.00
23.10
35.00
0.00
0.00
0.00
-
-

能否提供您试图实现的目标的更多详细信息?

朋友,请更改您的添加解析器代码

旧代码

format: function(s){
            // format your data for normalization
                return s.replace(/,/g, '').replace(/%/g, ''); //removes comma separator from formatted numbers

            }
根据莫蒂的建议

更新代码

format: function(s){
            // format your data for normalization
                s = s.replace(/,/g, '').replace(/%/g, ''); //removes comma, percentage 
                if(s && s.trim() && s.trim().length==1){
                       s = s.replace(/-/g,'');                  
                   }
                return s;
    }
希望这能解决你的问题。 在您给出的场景中(值包含更多的零,并且没有出现负数),为了使它看起来更漂亮,您可以将“-”替换为-1以将其与零分开


更新版本(如果您确信由于没有共享HTML,因此将不会有数据,我们只能假设标记中的hypens不包含额外的空格、制表符或其他不可见字符。tablesorter解析器设置为“numeric”,但返回字符串,因此比较可能不正确

正如@Xiaodoudou在jsFiddle示例中所示,我将正确地对hypens进行排序

此外,您可以在列的底部对非数字数据(字符串)进行排序-请参阅。不需要额外的解析器,只需将
排序底部
类添加到列的
-试用

数字

您可以使用数组和排序方法:

tab.sort(function(a,b){ 
    if(b==0){
      return -1
    }
    else if(a==0){
      return 1
    }
    else{
      return (a-b)
    }
})

伙计,你可以在这里尝试一件事,你可以使用-value-=-1,这可能会解决你的问题,我不会投你反对票,因为我认为这是一个很好的学习点,但是如果列中包含负数(例如
-5.00
),替换破折号会损坏数据.@Mottie感谢您的快速观察并指出我的错误。@lokeshjain2008谢谢!您的解决方案将排序问题解决到了一个级别,即零和连字符现在只出现在排序结果的下端,但在一个没有限制的簇中,它们是分散的)。这是应用您的解决方案后的一个示例排序结果-
0.00-0.00 0.00--1.00 22.00 23.10 35.00
(您可以看到,0.00和连字符在开始时以一束形式出现,没有排序,但之后,即在1.00之后,没有出现零或连字符)。考虑到您上面的评论,您提到用-1替换连字符,因为这符合我的要求,所以我替换了
s=s.replace(/-/g')s=s替换(/-/g,-1)现在我甚至把零和连字符都排序好了,在它们的串中。@SandePanath,我很高兴你找到了解决方案。”。祝您今天过得愉快。
format: function(s){
            // format your data for normalization
                s = s.replace(/,/g, '').replace(/%/g, ''); //removes comma, percentage 
                if(s && s.trim() && s.trim().length==1){
                       s = s.replace(/-/g,'');                  
                   }
                return s;
    }
format: function(s){
            // format your data for normalization
                s = s.replace(/,/g, '').replace(/%/g, ''); //removes comma, percentage 
                if(s && s.trim() && s.trim().length==1){
                       s = s.replace(/-/g,'-1');                  
                   }
                return s;
    }
<th class="string-bottom">Numeric</th>
tab.sort(function(a,b){ 
    if(b==0){
      return -1
    }
    else if(a==0){
      return 1
    }
    else{
      return (a-b)
    }
})