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日

相关文章

  • CSS3中几个新增加的盒模型属性使用教程

    针对“CSS3中几个新增加的盒模型属性使用教程”的问题,我为您提供以下完整攻略。 CSS3新增加的盒模型属性 CSS3新增加了几个盒模型属性,可以帮助我们更好地处理元素尺寸和布局,下面对每个属性进行详细介绍。 box-sizing box-sizing属性用于设置盒模型的尺寸计算方式,可以设为content-box和border-box两个值: conten…

    css 2023年6月11日
    00
  • 利用CSS,链接下划线也玩自定义

    下面是利用CSS自定义链接下划线的攻略: 第一步:取消下划线 首先,要实现自定义下划线,首先需要取消默认的下划线。这可以通过CSS中的text-decoration属性来实现。将其设置为none即可取消下划线。 a { text-decoration: none; } 第二步:使用border-bottom添加下划线 取消下划线后,需要使用其他方式添加下划线…

    css 2023年6月9日
    00
  • jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)

    jQuery是一个JavaScript库,它使得JavaScript编写代码变得更加简单。通过使用jQuery,我们可以使用更少的代码来完成许多常见的JavaScript任务,例如处理HTML文档遍历、事件处理、动画和很多其他的操作。同时,它也支持CSS选择器,可以使用CSS样式选择器来定位DOM元素。 奇偶匹配是CSS3中的一种选择器用法,用于匹配列表、表…

    css 2023年6月9日
    00
  • 浅谈浏览器的兼容性(必看篇)

    浅谈浏览器的兼容性(必看篇) 什么是浏览器兼容性 浏览器兼容性指的是同一份网页,在不同的浏览器以及不同的浏览器版本下,是否能够正常显示和运行。由于不同浏览器之间存在一定的差异,因此在开发网页时需要考虑到浏览器兼容性问题。 浏览器兼容性的重要性 浏览器兼容性对于网站的用户体验和网站的流量十分重要。如果一个网站在某个浏览器下无法正常打开或运行,很可能造成用户流失…

    css 2023年6月10日
    00
  • PhotoshopCC全部功能手册全解析

    Photoshop CC 全部功能手册全解析 Photoshop CC 是一款强大的图像处理软件,提供了众多高级功能和特效,让用户可以轻松地制作出各种优美的图像和设计作品。为了更好的使用 Photoshop CC,我们准备了一份完整的功能手册,让您了解 Photoshop CC 的全部功能和用法。 以下是 Photoshop CC 全部功能手册的详细说明: …

    css 2023年6月10日
    00
  • VUE-ElementUI 自定义Loading图操作

    下面是关于VUE-ElementUI 自定义Loading图操作的完整攻略及示例: 1. 什么是VUE-ElementUI自定义Loading图操作? 在web开发中,我们经常会遇到需要显示loading效果的场景,来提示用户当前正在加载中。VUE-ElementUI自带的Loading组件在满足一些基础需求的同时,也有不足的地方。因此,我们可以通过自定义L…

    css 2023年6月10日
    00
  • 教你使用css制作出超级炫酷的血轮眼和轮回眼特效

    下面是“教你使用css制作出超级炫酷的血轮眼和轮回眼特效”的完整攻略: 教你使用css制作出超级炫酷的血轮眼和轮回眼特效 准备工作 在开始之前,需要准备以下工作: 在html中引入以下css样式: .eye { width: 30px; height: 30px; background: white; border: 3px solid black; bor…

    css 2023年6月10日
    00
  • 7款风格新颖的jQuery/CSS3菜单导航分享

    《7款风格新颖的jQuery/CSS3菜单导航分享》是一篇文章,里面介绍了7种不同风格的菜单导航,这些导航都是由jQuery和CSS3实现的。下面是对这篇文章的详细讲解: 概述 本文介绍的7款菜单导航,均是由jQuery和CSS3技术实现的。在本文中,我们将详细介绍每一种菜单导航的实现原理,并且提供完整的代码示例和演示链接。 菜单导航一:FadeIn-Mic…

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