Внедрение TableSorter для включения цены в миллионы и миллиарды - PullRequest
1 голос
/ 27 ноября 2011

Я использую плагин TableSorter в jquery.Однако один из столбцов в таблице выглядит следующим образом:


Рыночная капитализация

  • $ 12M
  • $ 1.2B
  • $ 3B
  • $ 34M

И TableSorter не работает должным образом.Есть идеи как это исправить.Любой другой плагин, который я могу использовать?

PS: я не могу отменить суффикс M & B. Поэтому я не могу математически изменить рыночный предел, чтобы он работал правильно.

Спасибо

Ответы [ 3 ]

2 голосов
/ 27 ноября 2011

Проверьте эту скрипку

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

Создал это простосинтаксический анализатор, и он выглядит, чтобы сделать трюк

$.tablesorter.addParser({
        // set a unique id
        id: 'marketcap',
        is: function(s) {
            // return false so this parser is not auto detected
            return false;
        },
        format: function(s) {
            s = s.replace('$','');
            if(s.indexOf('M') >-1){
                s = parseInt(s)* 1000000;
            }else if(s.indexOf('B') >-1){
                s = parseInt(s)* 1000000000;
            }

            // format your data for normalization
            return s;
        },
        // set type, either numeric or text
        type: 'numeric'
    });
1 голос
/ 22 февраля 2012

Ответ Амина хорош. Также с «K» или его можно использовать с любой другой мерой. Таким образом, полный пример будет:

$.tablesorter.addParser({
    // set a unique id
    id: 'marketcap',
    is: function(s) {
        // return false so this parser is not auto detected
        return false;
    },
    format: function(s) {
        s = s.replace('$','');
        if(s.indexOf('K') >-1){
            s = parseInt(s)* 1000;
        }else if(s.indexOf('M') >-1){
            s = parseInt(s)* 1000000;
        }else if(s.indexOf('B') >-1){
            s = parseInt(s)* 1000000000;
        }

        // format your data for normalization
        return s;
    },
    // set type, either numeric or text
    type: 'numeric'
});

$(function() {
    $("table").tablesorter({
        headers: {
            3: {
                sorter:'marketcap'
            }
        }
    });
});             

Для HTML вроде:

<table cellspacing="1" class="tablesorter">             
<thead>> 
    <tr> 

        <th>english</th> 
        <th>japanese</th> 
        <th>calculus</th> 
        <th>Market Cap</th> 
    </tr> 
</thead> 
<tbody> 
    <tr> 

        <td>80</td> 
        <td>70</td> 
        <td>75</td> 
        <td>$34M</td> 
    </tr> 
    <tr> 

        <td>90</td> 
        <td>88</td> 
        <td>100</td> 
        <td>$1.2B</td> 
    </tr> 
    <tr> 

        <td>85</td> 
        <td>95</td> 
        <td>80</td> 
        <td>$12M</td> 
    </tr> 
</tbody> 

1007 *

0 голосов
/ 30 января 2014

Что-то не хватает !!В приведенном выше примере одним из значений является $ 1.2B, тогда parseInt (s) преобразует его в целое число.Попробуйте использовать вместо этого: parseFloat () & toFixed () для десятичных дробей, чтобы рассмотреть

$.tablesorter.addParser({
    // set a unique id
    id: 'marketcap',
    is: function(s) {
        // return false so this parser is not auto detected
        return false;
    },
    format: function(s) {
        s = s.replace('$','');
        if(s.indexOf('K') >-1){
            s = parseFloat(s).toFixed(3) * 1000;
        }else if(s.indexOf('M') >-1){
            s = parseFloat(s).toFixed(3) * 1000000;
        }else if(s.indexOf('B') >-1){
            s = parseFloat(s).toFixed(3) * 1000000000;
        }

        // format your data for normalization
        return s;
    },
    // set type, either numeric or text
    type: 'numeric'
});

$(function() {
    $("table").tablesorter({
        headers: {
            3: {
                sorter:'marketcap' // sorting (4th column with parser)
            }
        }
    });
});             
...