Не работает анализатор запятых jQuery TableSorter TableSorter

StackOverflow https://stackoverflow.com/questions/876092

Вопрос

Вот в чем моя проблема,

В настоящее время я использую сортировщик таблиц jQuery и нашел в Интернете анализатор цифр-запятых.Проблема, с которой я столкнулся, в том, что, похоже, это не работает.

Итак, вот как сортируется столбец:

  1. 4,666
  2. 141,666
  3. 293
  4. 341,666
  5. 346
  6. 461,676

Это должно быть отсортировано следующим образом

  1. 293
  2. 346
  3. 4,666
  4. 141,666
  5. 341,666
  6. 461,676

Анализатор, который я использую, это:

$( 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="{сортировщик:'fancyNumber'}" команда, как указано здесь: http://tablesorter.com/docs/example-meta-parsers.html

** Редактировать:** Похоже, что один из столбцов работает правильно, но в этом столбце все еще возникают проблемы.может быть, потому, что в нем есть цифры, разделенные запятыми?

Это было полезно?

Решение

Для всех, кто сталкивается с этим вопросом.Мне пришлось добавить класс в строку моего заголовка.Итак, для любого заголовка, который я хотел отсортировать по своему вкусу, я добавил этот класс:

<th class=\"{sorter: 'fancyNumber'}\">

Это включило сортировщик по умолчанию, что сделало его работу приятной.

Что заставило меня осознать свою ошибку в моих способах, так это включение отладчика следующим образом.

$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} });

Другие советы

Это также может произойти, если вы забудете включить плагин метаданных

** Опубликовано здесь, так как это был первый результат поиска в Google.

вот что я сделал:

$(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'}}});
});

работал с разделителем через запятую и точку.

проверьте это http://jsbin.com/equci5

Я нашел решение, которое сработало для меня.В разделе tablesorter.js измените форматФлоат() функционируйте следующим образом:

this.formatFloat = function (s) {
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

Это заменит запятые, которые мешали сортировке.Нашел ответ здесь.Надеюсь, это поможет ...!

Попробуйте явно назначить синтаксический анализатор в объявлении .tablesorter() .

.tablesorter( { headers: { 0: { sorter:'fancyNumber' } }); 

Смотрите источник

Как упоминал Джаред, вам нужно указать, какой столбец использует какой синтаксический анализатор, если вы не знаете индекс столбца, то вы можете найти его с помощью этого:

var fancyIndex = $('th.fancyColumn').prevAll().length
var headers = {};
headers[fancyIndex] = {sorter:'fancyNumber'}

$("table").tablesorter({headers:headers})

Я, попробуйте это регулярное выражение:/(\d{1,3})?(\,\d{3})*/

Анализаторы просматривают только первую строку tbody, чтобы определить, какой анализатор использовать.Я предполагаю, что в вашей первой строке нет никаких запятых.Я столкнулся с той же проблемой и, наконец, просто принудительно запустил нужный мне синтаксический анализатор, используя class="{sorter:'Воображаемый номер'}"

Вы полностью правы в том, что анализатор должен работать, причина, по которой это не так, связана с ошибкой в плагине.Короче говоря, плагин думает, что может правильно сортировать числа с запятыми в них, и поэтому использует свой встроенный сортировщик, но затем не может отсортировать их правильно.

Есть несколько способов это исправить.

Во-первых, вы можете (как вы предложили выше) принудительно использовать вашу функцию сортировки (либо в, либо в javascript при инициализации плагина).

Во-вторых, вы можете отредактировать плагин, чтобы использовать ваши функции предпочтительнее ваших собственных, этого можно достичь, изменив направление цикла for на строке 220 плагина.

В-третьих, вы можете исправить нарушенное поведение сортировки по умолчанию, изменив либо функцию определения цифр, чтобы она не принимала запятые (строка 861 плагина), либо изменив сортировщик чисел по умолчанию, чтобы он обрабатывал запятые (строка 852 плагина).

Я поднял этот вопрос на странице tablesorter google code: http://code.google.com/p/tablesorter/issues/detail?id=6

Я нашел решение, которое сработало для меня.В разделе tablesorter.js измените функцию FormatFloat() следующим образом:

this.formatFloat = function (s) {
            s = s.toString();
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

Это заменит запятые, которые мешали сортировке.Нашел ответ здесь.Надеюсь, это поможет ...!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top