使用jquery计算表格单元格中的值的总和

时间:2015-04-13 07:03:07

标签: javascript jquery

我有一个包含值的表,如下所示,

<table>
    <tbody>
        <tr>
            <td class='price'>5</td>
        </tr>
        <tr>
            <td class='price'>NA</td>
        </tr>
        <tr>
            <td class='price'>10</td>
        </tr>
        <tr>
            <td class='price'>NA</td>
        </tr>
        <tr>
            <td class='price'>20</td>
        </tr>
        <tr>
            <td class='total'></td>
        </tr>
    </tbody>
</table>

我的任务是计算有效值的总和(5,10和20)并显示总单元格中的总和。我试过的代码是,

var prices = $('.price'),
    total = 0;

$.each(prices, function(i, price) {
    if (price != 'NA') {
         total = total + price;
    }
});

$('.total').text(total);

我面临的问题是,我没有得到正确的输出。有时,表格单元格包含空值而不是“NA&#39;”。我不确定我错过了什么。请建议。

7 个答案:

答案 0 :(得分:1)

使用isNaN检查单元格是否包含值,然后将其转换为:

$.each(prices, function(i, price){
if (!isNaN($(this).text())){
     total = total + Number($(this).text());
}});

注意:如果您使用&#34; parseInt&#34;它将始终返回一个整数 - 所以如果你在表中有十进制值,请使用Number(String),它会尝试转换看起来像数字的所有内容......

答案 1 :(得分:1)

为你创造了一个小提琴...... Fiddle

var total = 0;
$(".price").each(function (i, price) {
    var price = $(this).text();

    if (price != 'NA') {
        total = total + parseInt(price);
    }

    $('.total').text(total);

});

答案 2 :(得分:0)

你需要使用td元素的text / html,并在进行添加之前将值解析为整数:

var prices = $('.price');
var total = 0;
 $.each(prices, function(i, price){
  var pc=$(this).text();  
  if (pc!= 'NA'){
       total = total + parseInt(pc,10);
  }});
$('.total').text(total);

答案 3 :(得分:0)

你的代码工作得很好这个问题是你总结了所以使用parseInt()函数解析一个字符串并返回一个整数。

parseInt($(this).text() , 10);

语法

parseInt(string, radix);

参数

<强>字符串

  

要解析的值。如果string不是字符串,则将其转换为   一。字符串中的前导空格将被忽略。

<强>基数

  

2到36之间的一个整数,表示基数(基数为   数字数字系统)上面提到的字符串。指定   10为人类常用的十进制数字系统。总是   指定此参数以消除读者的困惑并保证   可预测的行为。不同的实现产生不同   未指定基数时的结果。

答案 4 :(得分:0)

由于prices是jQuery对象使用$.fn.each(),因此您需要使用$.fn.text()来获取文本。

还可以使用parseInt()将字符串转换为整数。

使用

var prices = $('.price');
var total = 0;
prices.each(function() {
    var price = $(this).text(); //use the method to get text of cell
    if (price != 'NA') {
        total = total + parseInt(price, 10); //use parseInt to convert to number
    }
});
$('.total').text(total);

&#13;
&#13;
$(document).ready(function() {
  var prices = $('.price');
  var total = 0;
  prices.each(function() {
    var price = $(this).text();
    if (price != 'NA') {
      total += parseInt(price, 10);
    }
  });
  $('.total').text(total);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tbody>
<tr><td class='price'>5</td></tr>
<tr><td class='price'>NA</td></tr>
<tr><td class='price'>10</td></tr>
<tr><td class='price'>NA</td></tr>
<tr><td class='price'>20</td></tr>
<tr><td class='total'></td></tr>
</tbody>
</table>
&#13;
&#13;
&#13;

答案 5 :(得分:0)

$(document).ready(function(){
var prices = $('.price');
var total = 0;
$.each(prices, function(i, price)
{
    var val=$(this).text();
    if (val!="NA" && val!="")
       {
         total = total + parseInt(val);
       }
});

$('.total').text(total);
});

以下是Fiddle

答案 6 :(得分:0)

使用jquery获取所有td,使用jquery每个函数循环遍历所有tds,然后使用isNaN检查当前td是否包含数字。如果是,请将该值与总和相加。

var sum = 0, elText;
$('.price').each(function (index, element) { 
    elText = element.innerText;
    isNaN(elText) || (sum += parseInt(elText));
});
$('.total').text(sum);

JSFiddle