Javascript-按下提交按钮后如何对每一行的值求和

时间:2019-03-10 07:40:37

标签: javascript html

如何在每个提交按钮事件之后对每一行的值求和。

我需要计算<td>的总值。

当前代码正在计算总表行。

function myFunction() {
  var x = document.getElementById("myTable").rows[0].cells.length;
  document.getElementById("demo").innerHTML =  x  ;
}
<html>
<head>
<style>
table, td {
  border: 1px solid black;
}
</style>
</head>
<body>


<table id="myTable">
  <tr>
    <td>52</td>
    <td>52</td>
    <td>12</td>
  </tr>

</table>
<br> 

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>



</body>
</html>

4 个答案:

答案 0 :(得分:2)

获取所有td的迭代,并添加td的textContent。将字符串转换为数字

function myFunction() {
  var sum = 0;
  document.querySelectorAll('td').forEach(e => sum += +e.textContent)
  console.log(sum)
}
<html>

<head>
  <style>
    table,
    td {
      border: 1px solid black;
    }
  </style>
</head>

<body>


  <table id="myTable">
    <tr>
      <td>52</td>
      <td>52</td>
      <td>12</td>
    </tr>

  </table>
  <br>

  <button onclick="myFunction()">Try it</button>

  <p id="demo"></p>



</body>

</html>

答案 1 :(得分:1)

使用Array.from().cells转换为数组,并使用reduce()添加每个单元格的textContent。请确保使用{将textContent转换为数字{1}}或Unary Plus Number()

+
function myFunction() {
  var cells = Array.from(document.getElementById("myTable").rows[0].cells);
  let x = cells.reduce((ac,{textContent}) => Number(textContent) + ac,0);
  document.getElementById("demo").innerHTML =  x  ;
}
function myFunction() {
  var cells = document.getElementById("myTable").rows[0].cells
  let sum = 0;
  for(let i = 0;i<cells.length;i++){
    sum += +cells[i].textContent 
  }
  document.getElementById("demo").innerHTML =  sum
}

如果您想要一种不使用任何高级方法的简单方法。您可以使用

<html>
<head>
<style>
table, td {
  border: 1px solid black;
}
</style>
</head>
<body>
<table id="myTable">
  <tr><td>52</td><td>52</td><td>12</td></tr>
</table>
<br> 
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
</body>
</html>

答案 2 :(得分:1)

在代码更改最少的情况下,我使用querySelectorAll并使用+

转换为数字

JS <2015,因为OP可能是JS的新功能

get
function myFunction() {
  var sum = 0, cells = document.querySelectorAll("#myTable td");
  // all browsers understand a for loop
  for (var i=0; i<cells.length; i++) {
    sum += +cells[i].innerText;
  }
  document.getElementById("demo").innerText = sum
}
table,
td {
  border: 1px solid black;
}

相同但在更新的JS中-无需减少

<table id="myTable">
  <tr>
    <td>52</td>
    <td>52</td>
    <td>12</td>
  </tr>

</table>
<br>

<button type="button" onclick="myFunction()">Try it</button>

<p id="demo"></p>
function myFunction() {
  var sum = 0, cells = document.querySelectorAll("#myTable td");
  cells.forEach(cell => sum += +cell.innerText);
  document.getElementById("demo").innerText = sum
}
table,
td {
  border: 1px solid black;
}

答案 3 :(得分:0)

您需要遍历单元格。如果您首先使用传播语法(cells)将...传播到一个数组中,那么可以循环使用单元格集合的一种方法是使用.reduce。然后,您可以将.reducedestructuring assignment结合使用,以将每个表数据元素中的数字相加。

请参见以下示例:

const displaySum = _ => {
  const cells = [...document.getElementById("myTable").rows[0].cells],
  sum = cells.reduce((total, {textContent:num}) => +num + total, 0)
  
  document.getElementById("demo").textContent = sum;
}
<html>
<head>
<style>
table, td {
  border: 1px solid black;
}
</style>
</head>
<body>


<table id="myTable">
  <tr>
    <td>52</td>
    <td>52</td>
    <td>12</td>
  </tr>
</table>
<br> 

<button onclick="displaySum()">Try it</button>
<p id="demo"></p>
</body>
</html>