【问题标题】:Calculating sum of td classes using js or jQuery使用 js 或 jQuery 计算 td 类的总和
【发布时间】:2017-02-23 09:58:43
【问题描述】:

我有一个下拉选择菜单,其中包含代表计算机数量的各种选项(即 5、10、15、20...)。默认选择菜单值为 5。我正在使用一些 js 将下拉选择乘以一个数量(即 10)并使用 .price-1 类填充表 td。因此,例如,如果用户离开默认选择 5,则 .price-1 的计算值为 50。

这工作正常。

但是,然后我需要将 .price-1 与其他几个 <td> 类(即 .price-2、.price-3、.price-4...)相加,以得到 $ 值的总计#result 中显示。

如何使用 js 或 jQuery 对这些 td 类进行求和以获得总计?

下面是我需要汇总的表格的 html。

<table id="tableOrderTotal" class="table tableTotal"> 
 <tbody> 
  <tr> 
   <td>Item1</td> 
   <td class="price-1">calculated amount populated here</td> 
  </tr> 
  <tr> 
   <td>Item2</td> 
   <td class="price-2">calculated amount populated here</td> 
  </tr> 
  <tr> 
   <td>Item3</td> 
   <td class="price-3">13</td> 
  </tr>
  <tr> 
   <td>Item3</td> 
   <td class="price-4">30</td> 
  </tr> 
  <tr class="summary"> 
   <td class="totalOrder">Total:</td> 
   <td id="result" class="totalAmount"> </td> 
  </tr> 
 </tbody> 
</table>

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

使用attribute value contains selectortr 的第二个td 元素使用:nth-child() 获取所有td 元素。现在使用each() 方法对它们进行迭代,并使用里面的文本得到总和。

var sum = 0;

$('td[class*="price-"]').each(function() {
  sum += Number($(this).text()) || 0;
});

$('#result').text(sum);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tableOrderTotal" class="table tableTotal">
  <tbody>
    <tr>
      <td>Item1</td>
      <td class="price-1">calculated amount populated here</td>
    </tr>
    <tr>
      <td>Item2</td>
      <td class="price-2">calculated amount populated here</td>
    </tr>
    <tr>
      <td>Item3</td>
      <td class="price-3">13</td>
    </tr>
    <tr>
      <td>Item3</td>
      <td class="price-4">30</td>
    </tr>
    <tr class="summary">
      <td class="totalOrder">Total:</td>
      <td id="result" class="totalAmount"></td>
    </tr>
  </tbody>
</table>

@rayon 建议使用Array#reduce 方法。

$('#result').text([].reduce.call($('td[class*="price-"]'), function(sum, ele) {
  return sum + (Number($(ele).text()) || 0);
}, 0));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tableOrderTotal" class="table tableTotal">
  <tbody>
    <tr>
      <td>Item1</td>
      <td class="price-1">calculated amount populated here</td>
    </tr>
    <tr>
      <td>Item2</td>
      <td class="price-2">calculated amount populated here</td>
    </tr>
    <tr>
      <td>Item3</td>
      <td class="price-3">13</td>
    </tr>
    <tr>
      <td>Item3</td>
      <td class="price-4">30</td>
    </tr>
    <tr class="summary">
      <td class="totalOrder">Total:</td>
      <td id="result" class="totalAmount"></td>
    </tr>
  </tbody>
</table>

【讨论】:

  • [].reduce.call(document.querySelectorAll('[class*="price-"]'), function(a, b) { return a += +b.textContent || 0; }, 0); :)
  • @Rayon :哇,那太好了 :) 更新了你的建议...谢谢队友 :)
  • @Rayon 和 Pranav,这适用于将值硬编码到字段(.price-3 和 .price-4)中的两个 ,但它不会对计算的值求和.price-1 和 .price-2 中的值。如何让它包含 .price-1 和 .price-2 的计算值。正如我在原始帖子中提到的,这两个是由选择下拉菜单填充的,该下拉菜单将选择乘以给定的数字,然后将结果发布在 .price-1 和 .price-2 中。然后我需要将所有这些加起来作为一个总数。再次感谢您的帮助!
  • 我发现的另一件事。我最初将隐藏 .price-3 和 .price-4 ,如果它们对应的复选框被选中,它们将被添加到订单总数中。但是,即使它们被隐藏,它们似乎仍然包含在订单总额的总和中。有没有办法在它们隐藏时不将它们包含在总和中,但如果它们可见则包含它们?
  • @Rex :如果您在前两个 td 中提供了有效数字,那么它也会添加该值......如果它不是一个数字,那么它将被视为 0 ...
【解决方案2】:

jQuery 对象有一个直接属性,引用匹配元素的数量。

var sum = $('td[class*="price-"]').length;
$('#result').text(sum);

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签