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

yizhihongxing

下面是关于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日

相关文章

  • 将页脚固定在页面底部的CSS实战

    将页脚固定在页面底部是一个非常常见的需求,这需要使用CSS来实现。本文将介绍一些基本的CSS技巧和实践,让你能够更好地理解如何实现固定页脚效果。 CSS基础概念 在开始实现之前,我们需要了解一些CSS基础概念,这将有助于我们更好地理解如何构建CSS布局。 position属性: 定位属性,可以设置元素的定位方式。常用值有absolute、relative、f…

    css 2023年6月10日
    00
  • 使用Vue动态生成form表单的实例代码

    使用Vue动态生成form表单,可以根据数据动态生成表单项,非常方便,下面提供一份完整的攻略。 步骤一:创建Vue实例 首先,我们需要在html页面中引入Vue.js,然后创建一个Vue实例并挂载到指定的DOM节点上。 <div id="app"></div> <script src="https:…

    css 2023年6月10日
    00
  • 手把手教你实现漂亮的Qt 登录界面

    “手把手教你实现漂亮的Qt 登录界面” 是一篇详细讲解如何用Qt实现登录界面的文章。我们需要分步骤来实现这个功能,主要包括以下几步: 1. 构建Qt窗口程序 首先需要打开Qt Creator,创建一个新的Qt窗口程序。在项目配置中,我们需要设置窗口的标题、大小、风格等参数。代码如下: #include <QApplication> #includ…

    css 2023年6月10日
    00
  • CSS3中的Transition过度与Animation动画属性使用要点

    让我们来详细讲解一下“CSS3中的Transition过渡与Animation动画属性使用要点”的完整攻略。 Transition 过渡 概述 CSS3 的过渡(transition)属性可以为元素的属性添加过渡效果。当元素从一种样式变换为另一种样式时,过渡效果会平滑的呈现出来。过渡不是立刻执行的,而是在一个指定的时间段内逐渐实现。 transition 属…

    css 2023年6月10日
    00
  • Bootstrap使用基础教程详解

    Bootstrap使用基础教程详解 Bootstrap是一种流行的前端框架,适用于构建现代、响应式且功能强大的Web应用程序和网站。在本文中,我们将学习基础知识,开始使用Bootstrap。 安装Bootstrap 使用Bootstrap需要引入它的CSS和JS文件。你可以通过以下两种方式将Bootstrap引入到你的网站中: CDN引入:从网络上加载Boo…

    css 2023年6月10日
    00
  • css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局

    下面是详细的攻略。 首先,我们需要使用CSS3的border-radius属性来实现将正方形图片显示为圆形图片布局。具体步骤如下: HTML代码中插入一个<div>元素作为容器,并在其中插入一个<img>元素: “`html “2. 在CSS代码中,设置图片的样式为圆形,并将 `容器设置为透明: “`css .image-con…

    css 2023年6月10日
    00
  • HTML5单页面手势滑屏切换原理

    HTML5单页面手势滑屏切换是一种用于网页开发的交互效果,它可以使网页在移动设备中更加流畅、自然地进行内容切换和导航。下面是实现该效果的完整攻略和示例说明。 原理 这种手势滑屏切换的原理是基于苹果公司的Webkit内核,通过监听touchstart、touchmove、touchend等事件,来实现拖动屏幕时内容的平滑移动、页面的缓慢进出等效果。其中,关键的…

    css 2023年6月11日
    00
  • CSS网页布局入门教程8:三列浮动中间列宽度自适应

    下面我将为你详细讲解“CSS网页布局入门教程8:三列浮动中间列宽度自适应”的完整攻略。 一、什么是三列浮动中间列宽度自适应布局? 三列浮动中间列宽度自适应布局指的是一个网页布局中有三列,其中左右两列宽度固定,中间列的宽度则根据页面的大小自适应调整。这种布局常用于网页中要展示大量信息的情况,如新闻页面或个人博客。 二、如何实现三列浮动中间列宽度自适应布局? 实…

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