2009-05-18 2 views
2

Вот моя проблема,JQuery TableSorter Comma-Digit Parser не работает

В настоящее время я с помощью JQuery таблицы Сортировщик, и я нашел Comma-Digit анализатор в Интернете. Проблема, с которой я сталкиваюсь, заключается в том, что она не работает.

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

  1. 4.666
  2. 141.666
  3. 341.666
  4. 461.676

Это должно быть Сортировать ред, как

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

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

ответ

10

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

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

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

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

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

Прохладный. Отличная работа. – Jared

+1

Вам не обязательно это делать. Опция заголовков позволяет указать тип данных. Посмотрите http://tablesorter.com/docs/example-parsers.html и посмотрите. В ваших вариантах вы просто указываете 'headers: {5: 'mysorter'}' и hey presto. – Kezzer

+2

Это нехорошо, если у вас есть динамическое количество столбцов. Например. иногда этот столбец является столбцом 5 в одной таблице и столбце 4 в другой таблице. Поместив его в TH напрямую, вы убедитесь, что он работает повсюду. Мне не нравится указывать номера столбцов численно жестко. – Aaron

0

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

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

See the source

+0

Из-за того, как я генерирую свои столбцы и столбцы, которые могут быть выбраны пользователем, я никогда не узнаю, какой заголовок находится, а не. Я попытался использовать команду class = "{sorter: 'fancyNumber'}", как указано здесь: http://tablesorter.com/docs/example-meta-parsers.html –

+0

Я вижу это. Является ли tablesorter использующим другой синтаксический анализатор для столбцов «fancyNumber»?Было бы разумно перенести создание парсеров над другими, чтобы он получил первую трещину в столбце, если сначала выбирается один из других парсеров? – Jared

+0

Jared, Как я могу узнать, использует ли он другой парсер? Я использую мини-версию сортировщика, поэтому я не могу точно поставить этот синтаксический анализатор на передний план ... Моя мысль заключается в том, что он смотрит на него как число для некоторых строк и число с запятой для других. .. По какой-то причине его просто не работает правильно. –

0

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

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

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

Ducky, вторая строка не работает ... В ней говорится, что она отсутствует; на месте [ , где объявлен заголовок. –

+0

@Scott попробуйте сейчас, я забыл добавить var headers = {}; line – duckyflip

+0

@ducky, Nope, все еще не происходит. Один из них я использовал вашу идею, другой столбец, который сортировался неправильно, начал работать правильно. Может быть, это просто эта колонка, которая имеет проблемы ... Возможно, это потому, что в одном столбце есть целое число и целое число, разделенное запятой? –

0

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

3

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

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

+1

Я часами отрывал свои волосы от этого. Я не уверен, что документация плохая, или я просто идиот, но, конечно же, они должны отметить, что метаданные - это jQuery-плагин. Замечательно, как ваш комментарий, через 2 года, сумел мне помочь. –

0

Анализаторы только смотрят на первую строку tbody, чтобы определить, какой парсер использовать. Я предполагаю, что у вашей первой строки нет никаких запятых. Я столкнулся с той же проблемой, и, наконец, просто заставил парсер я хотел, используя класс = «{сортировщика:„fancyNumber“}»

2

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

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

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

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

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

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

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

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

2

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

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

Это заменит запятые, которые интерферирующих с сортировкой. Найдено ответов here. Надеюсь, это поможет ...!

0

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

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

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