我想计算表中特定列的值之和。
表是这样的:
<table>
<tbody>
<tr>
<td>Old cost</td>
<td class="oldCost">9 990,-</td>
</tr>
<tr class="discount">
<td>Service - 2</td>
<td>2 000,-</td>
</tr>
<tr class="template">
<td>Theme - 3</td>
<td>0,-</td>
</tr>
<tr class="result">
</tr>
</tbody>
</table>
问题是值是这样的(X XXX,-)所以我需要修剪(或爆炸?)它到一个正常的数字和然后创建一个总和的所有数字并显示在<tr class="result>
我尝试了很多方法,但我唯一得到的是NaN显示而不是一个总和。它不包括修剪函数,因为我只是没有找到合适的函数。
$("table").change(function(){
var theTotal = 0;
$("td:nth-child(2)").each(function () {
theTotal += parseInt($(this).val());
$(".result").text(theTotal);
});
});
由于您在代码中使用parseInt
,我假设您期望所有价格都是整数值,并且始终以字符串",-"结束。如果我的假设是正确的,下面的代码应该工作:
$("table").change(function(){
var theTotal = 0;
$("td:nth-child(2)").each(function () {
var val = $(this).text().replace(" ", "").replace(",-", "");
theTotal += parseInt(val);
});
$(".result").html('<td colspan="2">' + theTotal + ',- </td>');
});
代码从整数部分删除空格,并删除"空小数"标记。参见replace函数参考。
如果我的假设是错误的,这意味着价格可以是浮动值,您可以删除破折号并用点替换逗号,然后使用parseFloat
。
您不应该对"td"的内容使用"val",也不会对表进行"change"操作。你必须创建一个函数,并让它触发任何javascript改变tds中的值,就像这样(这将删除所有非数字或小数点的字符):
tablechange = function(){
var theTotal = 0;
$("tr:not(:last-child) td:nth-child(2)").each(function () {
theTotal += parseFloat($(this).html().replace(/[^0-9.]/g,''));
});
$(".result").text(theTotal);
};
tablechange();
您希望$(this).html
而不是$(this).val
来获取每个表单元格中的文本。然后用substr
修剪逗号之后的所有内容,用replace
折叠空格,然后你可以把数字加在一起:
var value;
var theTotal = 0;
$("td:nth-child(2)").each(function () {
value = $(this).html();
value = value.substr(0, value.indexOf(','));
value = value.replace(' ', '');
theTotal += parseInt(value);
$(".result").text('Total: ' + theTotal);
});
jsFiddle