返回

动态表格带小计和大计

Office技巧

导言

数据表格是显示和组织数据的一种有用方式。有时,您可能需要创建一个能够计算小计和大计的动态表格。本教程将指导您使用 HTML、CSS 和 JavaScript 创建此类表格。

创建表格

首先,我们需要使用 HTML 创建一个基本表格。

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>数量</th>
      <th>单价</th>
      <th>小计</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>商品 1</td>
      <td>10</td>
      <td>10.00</td>
      <td>100.00</td>
    </tr>
    <tr>
      <td>商品 2</td>
      <td>5</td>
      <td>15.00</td>
      <td>75.00</td>
    </tr>
    <tr>
      <td>商品 3</td>
      <td>8</td>
      <td>12.00</td>
      <td>96.00</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <th colspan="3">本页小计:</th>
      <td id="subtotal">271.00</td>
    </tr>
    <tr>
      <th colspan="3">累计:</th>
      <td id="total">271.00</td>
    </tr>
  </tfoot>
</table>

此表格包含一个标题行,一个主体部分,用于输入数据,以及一个页脚,其中显示本页小计和大计。

添加和删除行

接下来,我们需要添加一个添加新行的按钮。

<button id="add-row">添加行</button>

我们还需要添加一个删除行的按钮。

<button id="remove-row">删除行</button>

计算小计和大计

现在,我们需要使用 JavaScript 来计算小计和大计。

const table = document.querySelector("table");
const subtotal = document.querySelector("#subtotal");
const total = document.querySelector("#total");

const addRow = document.querySelector("#add-row");
addRow.addEventListener("click", () => {
  // 创建新行
  const newRow = table.insertRow();

  // 创建新单元格
  const newCell1 = newRow.insertCell();
  const newCell2 = newRow.insertCell();
  const newCell3 = newRow.insertCell();
  const newCell4 = newRow.insertCell();

  // 添加新单元格的内容
  newCell1.innerHTML = "<input type='text' name='item[]'>";
  newCell2.innerHTML = "<input type='number' name='quantity[]'>";
  newCell3.innerHTML = "<input type='number' name='price[]'>";
  newCell4.innerHTML = "0.00";

  // 重新计算小计和大计
  calculateSubTotal();
  calculateTotal();
});

const removeRow = document.querySelector("#remove-row");
removeRow.addEventListener("click", () => {
  // 删除最后一行
  table.deleteRow(table.rows.length - 1);

  // 重新计算小计和大计
  calculateSubTotal();
  calculateTotal();
});

const calculateSubTotal = () => {
  let subTotal = 0;
  const rows = table.querySelectorAll("tbody tr");
  rows.forEach((row) => {
    const quantity = row.querySelector("input[name='quantity[]']").value;
    const price = row.querySelector("input[name='price[]']").value;
    subTotal += quantity * price;
  });

  subtotal.innerHTML = subTotal.toFixed(2);
};

const calculateTotal = () => {
  let grandTotal = 0;
  grandTotal += parseFloat(subtotal.innerHTML);
  total.innerHTML = grandTotal.toFixed(2);
};

此 JavaScript 代码首先选择表格、小计和大计单元格。然后,它为添加新行按钮添加一个事件侦听器。当单击此按钮时,它将创建新行并为其添加单元格。新行的小计单元格初始值为 0.00。然后,它重新计算小计和大计。

删除行按钮的事件侦听器类似地工作,但它删除表格的最后一行。重新计算小计和大计。

计算小计 的函数遍历表格中的每一行,并为每一行乘以数量和单价。它将这些值累加到小计中,然后将其更新为小计单元格的内联 HTML。

计算大计 的函数简单地将小计的值添加到大计单元格的内联 HTML 中。

结论

本教程展示了如何使用 HTML、CSS 和 JavaScript 创建一个带本页小计和累计的数据表格。该表格允许用户添加和删除行,并且会自动更新小计和大计。