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日

相关文章

  • 举例详解CSS中position属性的使用

    下面是详细讲解“举例详解CSS中position属性的使用”的完整攻略。 CSS中position属性的使用 在CSS中,position属性用来设置元素的定位方式。常见的定位方式有relative、absolute、fixed和sticky。下面将对这四种定位方式进行详细的说明。 relative relative表示相对于元素自身的位置进行定位。相对定位…

    css 2023年6月9日
    00
  • wap图片滚动特效无css3元素纯js脚本编写

    让我为你讲解”wap图片滚动特效无css3元素纯js脚本编写”的完整攻略。 1.技术原理 该图片滚动特效的技术原理是通过JavaScript的定时器实现图片的滚动。具体实现过程中,需要获取DOM元素,并通过JS代码实现图片滚动效果。 2.实现步骤 2.1 HTML结构 我们需要先在HTML中定义好图片滚动的DOM结构。一个基本的结构可以包含一个容器元素、一个…

    css 2023年6月10日
    00
  • 纯CSS实现鼠标悬停提示的方法

    “纯CSS实现鼠标悬停提示的方法”是一种常用的前端技术,它可以使网站更美观,更易用,本文将详细讲解如何实现。 什么是鼠标悬停提示? 鼠标悬停提示是指当用户把鼠标放在一个元素上时,自动弹出一个提示框来提示用户相关信息。 用法 要使用鼠标悬停提示,我们需要使用CSS的:hover选择器来实现。 实现方法 方法一: 使用title属性 a:hover::after…

    css 2023年6月10日
    00
  • jQuery 1.9.1源码分析系列(十三)之位置大小操作

    本文将分享jQuery 1.9.1版本的位置大小操作的相关内容,包括尺寸与位置处理以及相关API的使用方法。 获取尺寸与位置 获取尺寸 使用如下API获取元素尺寸: var width = $(selector).width(); //获取元素宽度 var height = $(selector).height(); //获取元素高度 var innerWi…

    css 2023年6月10日
    00
  • html中Div与table的区别(各方面细节探讨)

    HTML中的div和table是常见的布局元素,它们在页面布局方面有着不同的应用场景和优劣势。在本文中,我们将详细讲解div和table的区别,包括以下关键点: 基本概念:div和table的定义和基本用途 布局方式:div和table的布局方式有何不同 可访问性:div和table对可访问性的影响 SEO优化:div和table的SEO优化差异 解析效率:…

    css 2023年6月10日
    00
  • js Canvas实现圆形时钟教程

    下面我来详细讲解一下“js Canvas实现圆形时钟教程”的完整攻略。 1. 前言 本教程将介绍如何使用HTML5中的Canvas绘制一个圆形时钟,并实时更新显示当前时间。本教程需要一些基本的JavaScript和HTML5的知识,也会用到Canvas的基本操作,如果您对这些知识还不是很熟悉,建议在开始本教程之前,先学习一下相关的基础知识。 2. 实现方法 …

    css 2023年6月10日
    00
  • CSS之定位布局(position,定位布局技巧)

    当我们在进行页面布局时,经常需要对元素进行定位,这就需要用到CSS的position属性。position属性有以下值: static (默认值):元素没有定位,遵循普通文档流布局,left、top、right、bottom、z-index属性不起作用 relative:元素相对于自己原来存在的位置进行定位,left、top、right、bottom、z-i…

    css 2023年6月9日
    00
  • 基于CSS实现带阴影和小箭头的黑色风格下拉菜单效果

    让我们来详细讲解一下如何基于CSS实现带阴影和小箭头的黑色风格下拉菜单效果吧。 1. HTML代码结构 首先,我们需要构造一个基本的HTML代码结构,包括 ul 和 li 元素,同时给 ul 添加一个类名 dropdown-menu 用于后续的 CSS 样式定制。 <div class="dropdown"> <butt…

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