【Java 进阶篇】JavaScript 动态表格案例

在这里插入图片描述

在这篇博客中,我们将深入了解JavaScript如何创建和操作动态表格。我们将从头开始构建一个动态表格,并逐步添加各种功能,使其能够实现数据的添加、删除和编辑。这个示例将有助于理解如何在前端开发中使用JavaScript创建交互性强大的表格。

准备工作

在开始之前,确保您已经创建了一个HTML文件并添加了以下初始结构:

<!DOCTYPE html>
<html>
<head><title>JavaScript Dynamic Table</title>
</head>
<body><h1>Dynamic Table Example</h1><table id="myTable"><tr><th>Name</th><th>Age</th><th>Action</th></tr></table><button id="addRow">Add Row</button>
</body>
</html>

我们的HTML文件包含一个空的表格和一个"Add Row"按钮。

创建基本的动态表格

首先,我们需要添加JavaScript代码来创建基本的动态表格。我们将使用DOM操作来实现这一点。

<script>// 获取表格元素const table = document.getElementById("myTable");// 创建表头const header = table.createTHead();const headerRow = header.insertRow(0);const headerName = headerRow.insertCell(0);const headerAge = headerRow.insertCell(1);const headerAction = headerRow.insertCell(2);headerName.innerHTML = "Name";headerAge.innerHTML = "Age";headerAction.innerHTML = "Action";
</script>

在这段代码中,我们首先获取了表格元素,然后使用createTHead方法创建表头,并插入表头行和表头单元格。我们为表头添加了"Name"、"Age"和"Action"列。

接下来,我们来创建一个用于添加新行的函数:

<script>// ...之前的代码// 创建函数以添加新行function addRow() {const newRow = table.insertRow(-1);const nameCell = newRow.insertCell(0);const ageCell = newRow.insertCell(1);const actionCell = newRow.insertCell(2);nameCell.innerHTML = "<input type='text'>";ageCell.innerHTML = "<input type='number'>";actionCell.innerHTML = "<button οnclick='deleteRow(this)'>Delete</button>";}// 添加"Add Row"按钮的点击事件监听器document.getElementById("addRow").addEventListener("click", addRow);
</script>

在这里,我们创建了一个名为addRow的函数,它用于添加新的行。在新的行中,我们插入了文本输入框(用于输入姓名)、数字输入框(用于输入年龄)和一个"Delete"按钮,点击该按钮将删除该行。

还添加了一个点击事件监听器,当"Add Row"按钮被点击时,将调用addRow函数。

删除行

下一步是实现删除行的功能。我们需要创建一个deleteRow函数,它将在点击"Delete"按钮时触发。

<script>// ...之前的代码// 创建函数以删除行function deleteRow(button) {const row = button.parentElement.parentElement;table.deleteRow(row.rowIndex);}
</script>

在这个函数中,我们首先获取到"Delete"按钮的父元素(即行),然后使用deleteRow方法删除该行。

编辑行

要使表格更加交互性,让我们添加一个编辑功能。我们将允许用户点击某一行的"Edit"按钮来编辑该行的内容。我们需要在addRow函数中为每一行添加一个"Edit"按钮,并创建一个用于保存编辑内容的函数。

<script>// ...之前的代码// 创建函数以保存编辑的内容function saveRow(button) {const row = button.parentElement.parentElement;const nameInput = row.cells[0].querySelector("input");const ageInput = row.cells[1].querySelector("input");const editButton = row.cells[2].querySelector("button");if (editButton.textContent === "Save") {nameInput.setAttribute("disabled", true);ageInput.setAttribute("disabled", true);editButton.textContent = "Edit";} else {nameInput.removeAttribute("disabled");ageInput.removeAttribute("disabled");editButton.textContent = "Save";}}
</script>

在这个函数中,我们首先获取了行中的输入框和"Edit"按钮。如果"Edit"按钮文字本身不同,我们将输入框的disabled属性设置为true,这将使输入框变为只读状态,同时将"Edit"按钮的文本更改为"Save",以表示当前用户正在编辑。

如果用户再次点击"Save"按钮,我们将取消输入框的只读状态,使用户可以编辑文本,并将"Save"按钮的文本更改为"Edit",以表示用户完成了编辑。

接下来,我们需要更新addRow函数,以添加"Edit"按钮并为其添加点击事件监听器:

<script>// ...之前的代码// 创建函数以添加新行function addRow() {const newRow = table.insertRow(-1);const nameCell = newRow.insertCell(0);const ageCell = newRow.insertCell(1);const actionCell = newRow.insertCell(2);const nameInput = document.createElement("input");const ageInput = document.createElement("input");const editButton = document.createElement("button");editButton.textContent = "Edit";editButton.onclick = function() {saveRow(this);};nameCell.appendChild(nameInput);ageCell.appendChild(ageInput);actionCell.appendChild(editButton);actionCell.innerHTML += " ";actionCell.innerHTML += "<button οnclick='deleteRow(this)'>Delete</button>";}// ...之后的代码
</script>

在这里,我们创建了"Edit"按钮,并为其添加了点击事件监听器,以便在用户点击按钮时调用saveRow函数。此外,我们也调整了addRow函数,以使用createElement方法创建输入框和按钮,然后将它们附加到对应的单元格中。

现在,用户可以通过点击"Edit"按钮来编辑每一行的内容。

总结

在这篇博客中,我们从头开始创建了一个JavaScript动态表格。我们了解了如何添加新行、删除行和编辑行,使表格更加交互性。这个案例展示了如何使用JavaScript DOM操作来创建强大的前端功能。

这只是一个起点,您可以进一步扩展这个示例,添加更多功能,如数据验证、排序、筛选等,以满足特定的需求。希望这篇博客对您在前端开发中使用JavaScript创建动态表格有所帮助。如果您有任何问题或需要更多帮助,请随时留言。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162672.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站如何优化加速,让网站降低延迟

优化网站架构 精简页面加载过程&#xff1a;通过消除冗余代码和不必要的图像&#xff0c;并采用CDN资源分发&#xff0c;以减少加载时间。 精心规划内容架构&#xff1a;通过使用恰当的标题和描述&#xff0c;使搜索引擎能够快速理解页面的内涵。 选择性能出众的前端框架&…

RT-Thread学习笔记(三):线程管理

线程管理 线程管理相关概念什么是时间片轮转调度器锁线程运行机制线程的五种状态 动态和静态创建线程区别动态和静态创建线程优缺点RT-Thread动态线程管理函数动态创建线程动态删除线程 RT-Thread静态线程管理函数静态创建线程 线程其他操作线程启动线程延时获得当前执行的线程…

Java并发面试题:(六)悲观锁和乐观锁和Java内存模型和CAS原理

悲观锁和乐观锁的区别 什么是悲观锁&#xff1f; 基本上我们理解的操作前对资源加锁&#xff0c;操作完后释放锁。说的都是悲观锁。悲观锁认为所有的资源都是不安全的&#xff0c;随时会被其他线程操作、更改。所以操作资源前一定要加一把锁、防止其他线程访问。 什么是乐观锁&…

【23种设计模式】装饰器模式

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

Excel·VBA单元格区域数据对比差异标记颜色

之前的一篇博客《ExcelVBA单元格重复值标记颜色》&#xff0c;是对重复的整行标记颜色 而本文是按行对比2个单元格区域的数据&#xff0c;并对有差异的区域&#xff08;一个单元格区域有的&#xff0c;而另一个单元格区域没有的&#xff09;标记颜色&#xff0c;且只要存在任意…

单链表经典OJ题:合并有序链表

目录 ​编辑 题目&#xff1a; 图例&#xff1a; 分析&#xff1a; 解法&#xff1a; 解法1: 解法2: 解法的对比&#xff1a; 解法2&#xff1a; 注意事项&#xff1a; 图例&#xff1a; 代码演示&#xff1a; 代码分析&#xff1a; 代码缺点&#xff1a; 重复…

[MySQL]BLOB/TEXT column ‘xxx‘ used in key specification without a key length

报错信息&#xff1a; SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column xxx used in key specification without a key length 原因&#xff1a; MySQL的唯一索引不支持text类型的字段&#xff01;

C++初阶-类和对象(上)

类和对象&#xff08;上&#xff09; 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装访问限定符封装 五、类的作用域六、类的实例化七、类的对象大小的计算如何计算类对象的大小类对象的存储方式猜测 八、类成员函数的this指针this指针的引出…

网站如何才能不被黑,如何做好网络安全

当企业网站受到攻击时&#xff0c;首页文件可能被篡改&#xff0c;百度快照也可能被劫持并重定向到其他网站。首要任务是加强网站的安全防护。然而&#xff0c;许多企业缺乏建立完善的网站安全防护体系的知识。因此&#xff0c;需要专业的网站安全公司来提供相应的保护措施。今…

番外8.1 配置+管理文件系统

Task01: Linux 文件系统结构&#xff1b; 可以进行Linux操作系统的文件权限管理与方式切换&#xff0c;可以应用磁盘与文件权限管理工具&#xff1b; 01&#xff1a;常见文件系统类型&#xff08;Ext4[rhel6默认文件管理系统], 存储容量1 EB1073741824 GB; XFS[rhel 7/8默认的文…

Radius OTP完成堡垒机登录认证 安当加密

Radius OTP&#xff08;One-Time Password&#xff09;是一种用于身份验证的协议&#xff0c;它通过向用户发送一个一次性密码来验证用户的身份。使用Radius OTP可以实现堡垒机登录&#xff0c;以下是一些实现步骤&#xff1a; 1、安装Radius服务器 首先需要安装Radius服务器…

【量化交易笔记】9.量化投资理论及一般流程

前言 在第7篇文章中指出&#xff0c;量化交易的主要有两方面应用&#xff0c;基于的数据主要是两个类型&#xff0c;如前面讲的用之前的数据预测股价&#xff0c;这类数据我们可归为纵向研究数据&#xff0c;又称时间序列数据&#xff0c;另一类是横截面数据&#xff0c;以称截…

关于CW32单片机pack包安装 KEIL IAR

CW32 系列微控制器软件开发工具入门 芯片包 1. 下载芯片包 官方下载链接&#xff1a;武汉鑫源半导体 2. 安装芯片包 双击芯片包.pack文件 支持 CW32F 系列的 IDE 支持 CW32F 系列的工具链&#xff1a; • • EWARM v7.70 或更高版本 MDK-ARM v5.17 或更高版本 2.1 EW…

Android MediaMetadataRetriever setDataSource failed: status = 0xFFFFFFEA

Android MediaMetadataRetriever setDataSource抛错&#xff1a; java.lang.RuntimeException: setDataSource failed: status 0xFFFFFFEA 原因是 setDataSource(String path) path指向的视频文件大小为0或者是破损视频资源。 Android AppGlideModule,DataFetcher,ModelLoad…

环境变量【使用命令行参数引出环境变量】

前提&#xff1a;命令行参数 大家在写C/C程序的时候肯定见过下面这种情况&#xff1a; main函数里面携带的参数&#xff0c;平常写代码过程中很少用到这两个参数&#xff0c;接下来我们就研究一下 我们也不知道 指针数组argv里面到底保存的是什么&#xff0c;也不知道这个a…

Spring 国际化:i18n

文章目录 i18n概述Java国际化Spring6国际化MessageSource接口使用Spring6国际化 i18n概述 国际化也称作i18n&#xff0c;其来源是英文单词 internationalization的首末字符i和n&#xff0c;18为中间的字符数。由于软件发行可能面向多个国家&#xff0c;对于不同国家的用户&…

Apacheb Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

Apache Shiro 1.2.4反序列化漏洞&#xff08;CVE-2016-4437&#xff09; 1 在线漏洞解读: https://vulhub.org/#/environments/shiro/CVE-2016-4437/2 环境搭建 cd /home/kali/vulhub/shiro/CVE-2016-4437启动&#xff1a; sudo docker-compose up -d # 拉取下载并启动sud…

PyQt 小程序

设备管理程序 v0.0.1.0, 终于出了一个基础版本,… … 两个字典的键值判断 辛亏用的是Python 这个编码时间大大缩短了 对已有的命令行进行GUI 化 from typing import Optional import PySide6.QtCore import PySide6.QtWidgets from cmd_ui import Ui_MainWindow from PySide6.…

亚马逊测评关于IP和DNS的问题

最近不少人询问了关于IP和DNS的问题&#xff0c;在此进行一些科普。 当客户端试图访问一个网站时&#xff0c;首先会向其所在的ISP的DNS服务器进行查询。如果ISP的DNS服务器没有相关缓存&#xff0c;则会向上级DNS服务器进行查询。 一些诸如CDN之类的服务&#xff0c;可能会为…

uni-app小程序使用DCloud(插件市场)流程

一、DCloud&#xff08;插件市场&#xff09; DCloud 是uni-app官方插件市场&#xff0c;里面有官方、团队、个人发布的众多插件&#xff0c;包括uni-ui、uni-pay 等。而像uni-ui这种大型组件库都有官方文档可参考&#xff0c;但一些团队或个人发布的小型插件没有文档&#xf…