实现TableSorter以包括数百万和数十亿的价格

时间:2011-11-27 09:48:22

标签: jquery jquery-plugins tablesorter

我在jquery中使用TableSorter插件。但是,表中的一列列出如下:


市值

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

TableSorter无法正常工作。知道如何解决它。我可以使用的任何其他插件吗?

P.S:我不能用后缀M& B.所以我不能在数学上修改市值,以使其正常运作。

由于

3 个答案:

答案 0 :(得分:2)

Check this fiddle out

通过the docs of 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 :(得分:1)

阿明的回答很好。也可以使用“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> 

答案 2 :(得分:0)

遗漏了什么!! 在上面的示例中,其中一个值为$ 1.2B,然后parseInt(s)将其转换为整数。 考虑使用:parseFloat()&amp; 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)
            }
        }
    });
});