JQuery TinySort没有正确排序数字

时间:2012-02-29 23:10:50

标签: jquery jquery-plugins

我在页面上有多个html表,每个表都有一个标题行。当我单击该列标题时,它应该按该列对所有表进行排序。我专门引用的列包含一个锚点,用于文本显示整数值。

当我点击列标题时,我遇到的排序不正确。假设我在此屏幕上有以下内容:

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/

上面我推荐的代码包含了html的样本。我不在其中,所以它可能不是100%。并非我怀疑它很重要,但表格是在ColdFusion 7MX中动态创建的。

2 个答案:

答案 0 :(得分:5)

确定,

我回答了自己的问题。今天早上回顾了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]});
        }
    }
);

答案 1 :(得分:0)

我通过在左侧添加零来匹配所有值的长度,为数值创建自定义字段,从而解决了这个问题。

<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] });     
}