js实现动态添加、删除行、onkeyup表格求和示例

下面是关于js实现动态添加、删除行、onkeyup表格求和的完整攻略。

1. 理解需求及思路

首先需要明确的是,我们要实现的功能主要有三个:动态添加行、动态删除行以及表格数据的求和。基于这些需求,我们可以制定以下的实现思路:

  1. 定义一个数组,用于存储表格数据;
  2. 使用DOM操作创建表格,并将表格数据导入数组;
  3. 为添加按钮绑定事件,以动态添加表格行;
  4. 为删除按钮绑定事件,以动态删除表格行;
  5. 使用循环遍历数组,对表格数据进行求和,并显示在表格底部。

2. 实现步骤

2.1 创建HTML页面

在HTML页面上创建表格,并设置表格头部和底部。同时,在页面上创建两个按钮,分别用于添加和删除表格行。

<table>
  <thead>
    <tr>
      <th>商品名称</th>
      <th>单价</th>
      <th>数量</th>
      <th>小计</th>
    </tr>
  </thead>
  <tbody id="table-body">
    <!--表格数据将动态添加在这里-->
  </tbody>
  <tfoot>
    <tr>
      <td colspan="3" align="right">总计:</td>
      <td id="total-amount">0</td>
    </tr>
  </tfoot>
</table>
<button id="add-row-btn">添加行</button>
<button id="delete-row-btn">删除行</button>

2.2 使用DOM操作创建表格行

定义一个数组 data 用于存储表格数据,并通过Js动态创建表格行,将表格数据导入数组。当添加按钮被点击时,会触发 addRow 函数,在函数中使用 createElement 方法以及 appendChild 方法动态添加新的一行。

const data = [];

function addRow() {
  const tbody = document.getElementById('table-body');
  const row = document.createElement('tr');

  const name = document.createElement('td');
  name.innerText = '商品名称';
  row.appendChild(name);

  const price = document.createElement('td');
  price.innerText = '0';
  row.appendChild(price);

  const count = document.createElement('td');
  const countInput = document.createElement('input');
  countInput.type = 'number';
  countInput.value = '0';
  countInput.onkeyup = function() {
    // 数量发生变化时,重新计算小计和总计
    const subtotal = price.innerText * this.value;
    const index = Array.from(tbody.children).indexOf(row);
    data[index].subtotal = subtotal;
    showTotalAmount();

    // 更新当前行的小计
    subtotalTd.innerText = subtotal;
  };
  count.appendChild(countInput);
  row.appendChild(count);

  const subtotalTd = document.createElement('td');
  subtotalTd.innerText = '0';
  row.appendChild(subtotalTd);

  tbody.appendChild(row);

  // 将当前行的数据存入数组
  data.push({
    price: 0,
    count: 0,
    subtotal: 0
  });
}

2.3 实现删除表格行功能

当删除按钮被点击时,会触发 deleteRow 函数,在函数中使用 removeChild 方法将选中的行从表格中删除。同时移除数组 data 中对应的元素。

function deleteRow() {
  const tbody = document.getElementById('table-body');
  const rows = tbody.children;

  for (let i = 0; i < rows.length; i++) {
    const checkbox = rows[i].querySelector('input[type="checkbox"]');
    if (checkbox.checked) {
      tbody.removeChild(rows[i]);
      data.splice(i, 1);
      i--;
    }
  }

  showTotalAmount();
}

2.4 实现表格的求和功能

通过 showTotalAmount 函数,我们将使用循环遍历数组中的数据并计算其总和,然后将总和显示在页面上。除此之外,我们还需要在 addRowdeleteRow 函数中调用 showTotalAmount 方法来更新表格的总计。

function showTotalAmount() {
  const tbody = document.getElementById('table-body');
  const rows = tbody.children;
  let total = 0;

  for (let i = 0; i < rows.length; i++) {
    const price = parseFloat(rows[i].children[1].innerText);
    const count = parseFloat(rows[i].children[2].children[0].value);
    const subtotal = price * count;

    total += subtotal;
  }

  const totalAmount = document.getElementById('total-amount');
  totalAmount.innerText = total;
}

3. 示例说明

3.1 动态添加、删除行

在实现行删除的过程中,我们通过遍历选中的行,并从表格和数组中移除它们来实现删除的功能。代码示例中,我们使用到了 querySelector 方法来获取行中的 checkbox 元素,从而判断哪些行被选中了。

for (let i = 0; i < rows.length; i++) {
  const checkbox = rows[i].querySelector('input[type="checkbox"]');
  if (checkbox.checked) {
    tbody.removeChild(rows[i]);
    data.splice(i, 1);
    i--;
  }
}

3.2 表格求和

在实现表格求和的过程中,我们通过循环遍历表格中的数据,并对每行的小计进行求和,得到表格的总和。代码示例中,我们使用到了 querySelector 方法来获取表格中的底部元素,并将求和结果更新到其中。

function showTotalAmount() {
  const tbody = document.getElementById('table-body');
  const rows = tbody.children;
  let total = 0;

  for (let i = 0; i < rows.length; i++) {
    const price = parseFloat(rows[i].children[1].innerText);
    const count = parseFloat(rows[i].children[2].children[0].value);
    const subtotal = price * count;

    total += subtotal;
  }

  const totalAmount = document.getElementById('total-amount');
  totalAmount.innerText = total;
}

以上就是js实现动态添加、删除行、onkeyup表格求和的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现动态添加、删除行、onkeyup表格求和示例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • jQuery实现可编辑的表格实例讲解(2)

    下面我将为您详细讲解关于“jQuery实现可编辑的表格实例讲解(2)” 的完整攻略。 1. 简单介绍 本篇攻略将针对 jQuery 实现可编辑表格的实例进行讲解。通过使用 jQuery,可以实现在表格中获得实时编辑的效果。这样可以增加用户的操作便捷性和在数据处理方面的灵活性。 2. 前置依赖 在实现可编辑表格前,我们需要准备以下工具和资源: jQuery 3…

    css 2023年6月10日
    00
  • div css制作网页实战笔记心得

    下面是详细的“div css制作网页实战笔记心得”的完整攻略: 1.什么是div和css? 1.1 div是什么? div是HTML中一个标签,它代表一个没有具体含义的元素容器,可以用来把网页内容划分成不同的块。我们可以在CSS中为它定义样式,使它的外观和行为与其它元素不同。 1.2 CSS是什么? CSS(Cascading Style Sheets)翻译…

    css 2023年6月10日
    00
  • uni-app学习之nvue使用教程

    一、nvue简介及使用场景 nvue是uni-app框架的新型组件化方案,它是一种基于webview(也就是小程序内嵌的webview)的组件开发方案,可以使用vue语法编写,主要用于实现小程序内拥有原生乃至更高的性能与动画效果。 nvue的特点: 相较于weex等其他方案,nvue的兼容性更好,可以兼容所有支持webview的小程序和app平台,如微信小程…

    css 2023年6月10日
    00
  • 兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码

    接下来是详细讲解“兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码”的完整攻略。 首先,需要说明一下遮罩层的概念。遮罩层是一种常见的页面蒙版(或称为遮挡层),一般情况下用于模拟弹窗、广告等强制性消息窗口。我们需要在页面上添加一个遮罩层,通过覆盖整个网页并给予透明度,使得用户无法操作网页内的元素,同时突出弹出的窗口。 接下来,我们来分步骤讲解 jQu…

    css 2023年6月10日
    00
  • css弹性盒flex-grow、flex-shrink、flex-basis详解

    我们来详细讲解一下 CSS 弹性盒子模型中的 flex-grow、flex-shrink 和 flex-basis 属性。 弹性盒子模型介绍 CSS 弹性盒子模型(Flexbox)是一种基于浏览器的布局模式,使开发人员可以更加方便、灵活地设计和排列元素。通过指定容器中的弹性盒子的布局方式、方向、对齐方式、大小等属性,可以实现各种复杂的布局效果。 flex-g…

    css 2023年6月10日
    00
  • CSS中理解层叠性及权重如何分配

    CSS中的层叠性和权重是很重要的概念,它们影响着样式的表现和优先级,下面为你详细讲解。 什么是层叠性 层叠性指的是当多个CSS样式作用在同一个HTML元素上时,它们之间的优先级及表现方式。当同一元素上出现了多个CSS规则,浏览器会根据规则来确定其最终表现形式。 如何理解层叠性 我们可以理解为,一个元素的样式可以由多条规则共同定义,不同规则可能会对同一个样式属…

    css 2023年6月9日
    00
  • CSS字体中英文名称对照表 CSS常用中文字体英文名称对照表

    CSS字体中英文名称对照表(CSS font-family)指的是在CSS样式中用于控制文字字体的属性。在CSS中,我们可以使用字体名称、字体系列、或者带有自描述性的通用性字体系列来定义字体样式。 下面是常用的英文字体名称和它们对应的中文字体名称: 英文(English) 中文(Chinese) Arial 宋体(SimSun)、黑体(SimHei) Tim…

    css 2023年6月9日
    00
  • JS兼容所有浏览器的DOMContentLoaded事件

    要兼容所有浏览器的DOMContentLoaded事件,我们需要做如下工作: 1. 检查document.readyState 在DOMContentLoaded事件执行之前,先判断document.readyState是否为complete,如果是,则直接执行回调函数。如果不是,我们绑定一个DOMContentLoaded事件,等到它触发时再执行回调函数。…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部