在Bootstrap表中对货币进行排序

时间:2015-06-23 09:06:42

标签: javascript jquery twitter-bootstrap sorting bootstrap-table

我想将货币符号添加到我的号码,同时使值仍然可以作为我的Bootstrap表中的数字排序(第30-34行;表格中的第4列):

for (var p=0; p<variable_data.length; p++){
    try{
        variable_data[p]["4"] = "$" + Math.round(variable_data[p]["4"])
    } catch(e){ }
}

http://jsfiddle.net/mademoiselletse/s0d1xgzt/

附加'$'的值按字符串而不是数字排序。我在网上找到的所有货币排序问题都与DataTable和tablesorter()插件有关。是否比安装更多jQuery插件更快地解决了这个问题?

非常感谢你的帮助!

4 个答案:

答案 0 :(得分:0)

检查自定义示例here

您需要发送data-sorter function,从字符串中删除$,然后将其作为数字进行比较。

答案 1 :(得分:0)

我遇到了类似的问题,最后从他们的实际网站http://issues.wenzhixin.net.cn/bootstrap-table/#options/custom-sort.html

看了自定义分类器示例的源代码。

首先,在定义包含货币/货币/美元值的列时,将分类器的引用添加到要使用的任何javascript函数。这是我的货币列定义:

[
    "field" => "total",
    "title" => "Total",
    "sortable" => true,
    "sorter" => "totalCurrencySort"
]

此后,您将要创建该javascript函数,该函数在对特定列进行排序时执行。在这里,我们定义了 totalCurrencySort ,该参数可以包含4个参数,但是仅需要前两个参数。

function totalCurrencySort(a, b, rowA, rowB) {  
    a = +a.substring(1); // remove $
    b = +b.substring(1);
    if (a > b) return 1;
    if (a < b) return -1;
    return 0;
}

要进行适当的比较,可以根据需要除去“ $”,然后通过数字求值确定两个值之间的适当排序状态,并相应地返回。如果您的自定义排序逻辑需要使用该行中的其他数据进行更复杂的计算,则rowN引用将提供该行的完整数据集。

答案 2 :(得分:0)

我太新了,无法评论Art的帖子,但想添加一些对我有用的笔记。 Art帖子中的totalCurrencySort函数为我工作。在表标题中,我将属性设置为数据排序器(而不是仅排序器)。

function totalCurrencySorter(a, b, rowA, rowB) {
a = +a.substring(1);  // remove $
b = +b.substring(1);
if (a > b) return 1;
if (a < b) return -1;
return 0;
}

function totalCurrencyFormatter(data) {
var field = this.field
return '$' + data.map(function (row) {
return +row[field].substring(1)
}).reduce(function (sum, i) {
return sum + i;
}, 0)
}

对于HTML表,我的标题通常是这样的:

<thead>
<tr>
<th data-field="id" data-sortable="true">ID</th>
<th data-field="exp_date" data-sortable="true">Date</th>
<th data-field="amount" data-sortable="true" formatter="totalCurrencyFormatter" data-sorter="totalCurrencySorter">Amount</th>
</tr>
</thead>

答案 3 :(得分:0)

要添加到Art和OptimisticToaster的答案中,我也太新了,无法评论,所以我对这个问题的看法是:

function totalCurrencySort(a, b, rowA, rowB) {  
    
    a = Number(a.replace(/[^0-9.-]+/g,""));
    b = Number(b.replace(/[^0-9.-]+/g,""));
    
    if (a > b) return 1;
    if (a < b) return -1;
    return 0;
}

我当时使用的数字格式为1,000.50英镑,因此去除任何非数字数字都可以使该排序无论数字使用哪种格式都可以工作。