计算和一列- jQuery



我想计算表中特定列的值之和。

表是这样的:

<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

最新更新