计算具有相似类的每个td的总和

13

我的HTML表格单元格看起来像这样

<td class="20">1</td>
<td class="20">2</td>
<td class="20">3</td>
<td class="20">4</td>
<td class="20">5</td>
<td class="20">3</td>
<td class="total"></td>
<td class="30">2</td>
<td class="30">5</td>
<td class="30">6</td>
<td class="total"></td>

我想要计算在 class 为 total 前有多少个 td,然后将这些值加起来并放入相应的总计 class 的 td 中。

所以我想要得到:

<td class="20">1</td>
<td class="20">2</td>
<td class="20">3</td>
<td class="20">4</td>
<td class="20">5</td>
<td class="20">3</td>
<td class="total">Total : 18</td>
<td class="30">2</td>
<td class="30">5</td>
<td class="30">6</td>
<td class="total">Total : 13</td>

这是我尝试过的东西。

var sum = 0;
$('.total').each(function(){
var tdTxt = $(this).prev('td').text();
    sum += parseFloat(tdTxt);                       
});

但是它并不起作用。如何实现这一点?

7个回答

13

试一试:

var temp = 0;
$('td').each(function(){

var tdTxt = $(this).text();
     if($(this).hasClass('total')) {
         $(this).text(temp);
         temp = 0;
    } else {
       temp+= parseFloat(tdTxt);    
    } 

});

https://jsfiddle.net/8f4b1tok/


4
看到您的更新后,我可以选择使用 prevUntil 解决方案。
$('.total').each(function(){//To calculate with
  var sum = 0;//initialize sum equal to 0
  var fields = $(this).prevUntil('.total');//find the required tds until the .total
  fields.each(function(){//loop each total fields
    sum += parseFloat($(this).text());//add each tds value to sum
  });
$(this).html('<b>The total is: ' + sum + '</b>');//push the value of sum to .total field
});

https://jsfiddle.net/dox114ff/


4

$(document).ready(function() {

  $('.total').each(function() {
    var prevClass = $(this).prev().attr('class');
    var sum = 0;
    $('.' + prevClass).each(function() {
      sum += Number($(this).text());
    })

    $(this).text('Total :'+sum);
  })

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td class="20">1</td>
    <td class="20">2</td>
    <td class="20">3</td>
    <td class="20">4</td>
    <td class="20">5</td>
    <td class="20">3</td>
    <td class="total">8</td>
    <td class="30">2</td>
    <td class="30">5</td>
    <td class="30">6</td>
    <td class="total"></td>
  </tr>
</table>


3
自从jQuery提供了.prevUntil() API来遍历前一个兄弟元素,直到遇到停止的元素,使用方法如下:
$('.total').each(function() {

  var sum = 0,
      elem = $(this).prevUntil('.total');

  elem.each(function() {
     sum += parseInt($(this).text())
  });

  $(this).text('Total :' + sum);

});

演示


2
您可以使用prevUntil来导航回到td的前一个siblings,直到选择器、DOM等。关于prevUntil,您可以在这里了解更多信息。
请在这里查找工作演示。 HTML:
<table>
    <tbody>
        <tr>
            <td class="20">1</td>
            <td class="20">2</td>
            <td class="20">3</td>
            <td class="20">4</td>
            <td class="20">5</td>
            <td class="20">3</td>
            <td class="total"></td>
            <td class="30">2</td>
            <td class="30">5</td>
            <td class="30">6</td>
            <td class="total"></td>
        </tr>
    </tbody>
</table>

JS:

$(function () {
    $('.total').each(function () {
        var numbers = $(this).prevUntil('.total').text().split('');
        var total = 0;
        $.each(numbers, function (k, v) {
            total += parseInt(v);
        });
        $(this).text('[Total = ' + total + ']');
        console.log('total=', total);
    })
});

2

0
你可以尝试以下方法:
$('.total').each(function() { 
    var sum = $(this).prevUntil('.total').map(function() { 
        return parseInt($(this).text()); 
    }).get().reduce((a, b) => a + b, 0);

    $(this).text('Total : ' + sum);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接