JQuery TableSorter Парсер запятой-цифры не работает - PullRequest
2 голосов
/ 18 мая 2009

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

В настоящее время я использую сортировщик таблиц JQuery и нашел в сети анализатор запятой. У меня проблема в том, что она не работает.

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

  1. 4666
  2. 141666
  3. 293
  4. 341666
  5. 346
  6. 461676

Это должно быть отсортировано как

  1. 293
  2. 346
  3. 4666
  4. 141666
  5. 341666
  6. 461676

Парсер, который я использую, таков:

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

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

Ответы [ 10 ]

10 голосов
/ 18 мая 2009

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

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

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

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

$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} });
3 голосов
/ 10 июня 2009

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

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

2 голосов
/ 02 декабря 2015

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

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

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

2 голосов
/ 09 июня 2011

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

$(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

0 голосов
/ 11 мая 2017

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

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

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

0 голосов
/ 21 декабря 2011

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

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

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

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

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

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

0 голосов
/ 07 июля 2009

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

0 голосов
/ 09 июня 2009

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

0 голосов
/ 18 мая 2009

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

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

$("table").tablesorter({headers:headers})
0 голосов
/ 18 мая 2009

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

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

См. Источник

...