JQuery TinySort没有正确排序数字

问题描述:

我在一个页面上有多个html表格,每个表格都有一个标题行。当我点击该列标题时,它应该按该列对所有表进行排序。我特别提到的列包含一个锚点,它为文本显示一个整数值。JQuery TinySort没有正确排序数字

当我点击列标题时,我遇到了错误的排序。假设我有这个屏幕负载以下:

83 
84 
104 

现在我单击列标题,最后的结果就变成了:

104 
83 
84 

我写交替排序按第二下,什么码发生的是104和84绕着83旋转。我认为发生的是它正在比较这些不正确。我已经用更大的数据集对它进行了测试,并且当任何数字不共享数字的位数时出现问题。

是否有任何东西(可能是我失踪的国旗?)告诉这件事要正确排序?我所有更类似字符串的数据都可以正确排序。

代码:

<html> 
<head> 
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" src="jquery.tinysort.min.js"></script> 
    <script language="javascript"> 
    var aAsc = []; 
    $(".SubHead").click(
     function() { 
      var nr = $(this).index(); 
      aAsc[nr] = aAsc[nr]=='asc'?'desc':'asc'; 
      $('.resultTable>tbody>tr:not(.SubHeadRow)').tsort("td:eq("+nr+")",{order:aAsc[nr]}); 
     } 
    ); 
    </script> 
</head> 
<body> 
    <table class="resultTable" border="1"> 
     <tr class="SubHeadRow"> 
      <td class="SubHead"> 
       <a href="#">ID</a> 
      </td> 
      <td class="SubHead"> 
       <a href="#">Application Header</a> 
      </td> 
      <td class="SubHead"> 
       <a href="#">Version Header</a> 
      </td> 
     </tr> 
     . 
     . 
     . 
    </table> 
    . 
    . 
    . 
</body> 

编辑: 这是链接的插件:http://tinysort.sjeiti.com/

上面我ammended的代码,包括什么样的HTML看起来像一个样本。我不是面前的,所以它可能不是100%。不是我怀疑它很重要,但是这些表是在ColdFusion 7MX中动态创建的。

+0

我不熟悉那个插件,但它看起来像是按字母顺序排序而不是数字排序。 – asawyer 2012-02-29 23:18:19

+0

你能发布html吗? – elclanrs 2012-02-29 23:19:44

+0

@asawyer这正是我的想法。试图找出如何让它做数字化。编辑其他信息... – Rig 2012-03-01 00:29:36

好吧,

我回答了我自己的问题。今天早上回顾了TinySort网站,我注意到了这个区域。花费数小时专注于此功能后,很容易看出它是如何被忽略的。答案是http://tinysort.sjeiti.com/,在下解析一个自定义的排序函数并做了一些小调整。

我创建了整数列的自定义大小写,并传递了一个自定义比较函数。请看下图:

var aAsc = []; 
$(".SubHead").click(
    function() { 
     var nr = $(this).index(); 
     aAsc[nr] = aAsc[nr]=='desc'?'asc':'desc'; 
     if(nr == 0){ 
      $('.resultTable>tbody>tr:not(.SubHeadRow)').tsort("td:eq("+nr+")", 
       { 
        sortFunction:function(a,b) { 
         var order = (aAsc[nr]=='asc')?1:-1; 
         var i = parseInt(a.s); 
         var j = parseInt(b.s); 
         if(i===j){ 
          return 0; 
         } else { 
          return (i > j)?order:-1*order; 
         } 
        } 
       } 
      ); 
     } else { 
      $('.resultTable>tbody>tr:not(.SubHeadRow)').tsort("td:eq("+nr+")",{order:aAsc[nr]}); 
     } 
    } 
); 
+3

TinySort应该提供将所有值视为数字的选项。 – Gruber 2012-05-22 13:11:41

我已经通过创建数值的自定义字段中添加零到左边以匹配所有值的长度,解决了这个问题。

<td data-sort="00000000181661 " class="sk_right">1.816,61 €</td> 
<td data-sort="00000000096260 " class="sk_right">962,60 €</td> 

var aAsc = []; 
function sk_sort_col(id, nr) { 
    aAsc[nr] = aAsc[nr] == 'asc' ? 'desc' : 'asc'; 
    $('table#' + id + '> tbody > tr ').tsort('td:eq(' + nr + ')', { attr: 'data-sort', order: aAsc[nr] });  
}