JQuery TinySort неправильно сортирует числа - PullRequest
1 голос
/ 01 марта 2012

У меня есть несколько 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>

Edit: Это ссылка на плагин: http://tinysort.sjeiti.com/

Выше я исправил код, включив в него пример того, как выглядит HTML. Я не против этого, так что не может быть на 100%. Не то чтобы я подозреваю, что это важно, но таблицы создаются в ColdFusion 7MX динамически.

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Хорошо,

Я ответил на свой вопрос. Просматривая сайт 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]});
        }
    }
);
0 голосов
/ 19 марта 2013

Я решил эту проблему, создав настраиваемое поле для числовых значений, добавив нули слева, чтобы соответствовать длине всех значений.

<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] });     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...