Подтвердить что ты не робот

JQuery tablesorter - Не сортировать столбец с форматированным значением валюты

jQuery 1.7.1 и плагин tablesorter - у меня есть столбец валюты с тысячами разделителей и значения, такие как $52.00 $26.70 $100.00 $50.00 $1,002.00 $1,102.00. Когда я пытаюсь сортировать сортировку следующим образом,

   $1,002.00  
   $1,102.00
   $26.70
   $50.00
   $52.00
   $100.00

Нужны значения, например,

   $26.70
   $50.00
   $52.00
   $100.00
   $1,002.00  
   $1,102.00

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

4b9b3361

Ответ 1

Tablesorter позволяет вам определить пользовательские парсеры для таких вещей.

// add parser through the tablesorter addParser method 
$.tablesorter.addParser({ 
    // set a unique id 
    id: 'thousands',
    is: function(s) { 
        // return false so this parser is not auto detected 
        return false; 
    }, 
    format: function(s) {
        // format your data for normalization 
        return s.replace('$','').replace(/,/g,'');
    }, 
    // set type, either numeric or text 
    type: 'numeric' 
}); 

$(function() {
    $("table").tablesorter({
        headers: {
            6: {//zero-based column index
                sorter:'thousands'
            }
        }
    });
});

Возможно, вам придется настроить функцию формата, которую я не тестировал.

Ответ 2

Если вы просто хотите исправить номера валют (быстрее):

<script type="text/javascript">
    $("table").tablesorter({
        textExtraction: function(node){ 
            // for numbers formattted like €1.000,50 e.g. Italian
            // return $(node).text().replace(/[.$£€]/g,'').replace(/,/g,'.');

            // for numbers formattted like $1,000.50 e.g. English
            return $(node).text().replace(/[,$£€]/g,'');
         }
    })
</script>

<td><span>£80,000.00</span></td>

Мне не нравятся эти 3 других предложенных решения в StackOverflow:

  • 'Использовать собственный парсер и применять его в таблице сортировки init' - не использовать повторно для таблиц лотов
  • 'Использовать собственный парсер и применять его с классом ячейки таблицы' - грязная разметка
  • 'Fix TableSorters сортировать валюту в источнике' - хлопот для будущих обновлений

Ответ 3

Если вы хотите исправить все типы данных (наиболее гибкие):

<script type="text/javascript">
    $(function() {
        $("table").tablesorter({
            textExtraction: function(node){ 
                var cell_value = $(node).text();
                var sort_value = $(node).data('value');
                return (sort_value != undefined) ? sort_value : cell_value;
            }
        })
    })
</script>

<td data-value="2008-04-01">01 Apr 2008</td>
<td>Alice</td>
<td data-value="80.00"><span>£80.00</span></td>

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

Ответ 4

Следуя той же идее, предложенной @Ownen, поскольку TableSorter v2.16.0, вы можете напрямую использовать атрибут data-text, без необходимости объявлять свою собственную функцию textExtraction (подробнее здесь):

<td data-text="2008-04-01">01 Apr 2008</td>
<td>Alice</td>
<td data-text="80.00"><span>£80.00</span></td>

Этот атрибут работает и с другими виджетами, например math.

Примечание. Чтобы заставить его работать с выходным виджем, вам нужно объявить опцию output_dataAttrib:

$('#table').tablesorter({
    widgets: ["output"],
    widgetOptions : {
       output_dataAttrib: 'data-text'
    }
});