当前位置: 首页 > news >正文

JavaScript基础(26)_dom增删改练习

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><title>DOM增删改练习</title><link rel="stylesheet" href="../browser_default_style/reset.css"><style>table {border: 1px black solid;/* 表格边框合并 */border-collapse: collapse;margin-top: 20px;margin-left: 20px;}thead {background-color: aquamarine;}td {border: 1px black solid;font-size: large;text-align: center;vertical-align: middle;width: 80px;height: 22px;}tr>td:nth-of-type(2) {width: 180px;}a {color: blue;text-decoration: none;}form {border: 1px black solid;width: 320px;height: 230px;margin-left: 20px;}.title {display: flex;width: 100%;height: 80px;font-weight: bolder;font-size: large;align-items: center;justify-content: center;}li {list-style: none;margin: -10px 0px 0px 20px;}.button_position {display: flex;align-items: center;justify-content: center;}#add_info {display: flex;width: 100px;height: 30px;align-items: center;justify-content: center;}</style><script>// 创建一个 "删除一行表格数据" 功能的函数function delete_tr() {// this指向当前调用方法的对象,即:all_anchor[i]。var tr = this.parentNode.parentNode;// 类似于:var name_td = tr.getElementsByTagName("td")[0].innerHTML;var name_td = tr.children[0].innerHTML;var flag = confirm("你确实要删除" + name_td + "吗?");if (flag) {tr.parentNode.removeChild(tr);}// 结束onclick事件跳转,结束语句执行。// 此代码也适用于取消超链接的默认行为,相当于:href = "javascript:;"。return false;}window.onload = function () {// 实现删除 "当前表格数据" 按钮功能var all_anchor = document.getElementsByTagName("a");for (var i = 0; i < all_anchor.length; i++) {// 赋值对象内容而不是赋值返回值,所以不需要带();all_anchor[i].onclick = delete_tr;}// 获取 "添加信息" 按钮、找到表格、表身体var add_info = document.getElementById("add_info");var table = document.getElementsByTagName("table")[0];var tbody = document.getElementsByTagName("tbody")[0];add_info.onclick = function () {// 定义变量接收来自 "用户的输入值"。// 注意:表单文本框内的属性不能用innerHTML,只能用value。var name = document.getElementsByClassName("name")[0].value;var email = document.getElementsByClassName("email")[0].value;var salary = document.getElementsByClassName("salary")[0].value;// 根据表的节点树,开始创造节点:// <tbody>//     <tr>//         <td>Tom</td>//         <td>tom@tom.com</td>//         <td>5000</td>//         <td><a href="">删除</a></td>//     </tr>// </tbody>// 创建文本节点对象,把用户的输入值赋值给文本节点对象var name_textnode = document.createTextNode(name);var email_textnode = document.createTextNode(email);var salary_textnode = document.createTextNode(salary);var author_textnode = document.createTextNode("删除");// 创建a元素、添加:href属性var a = document.createElement("a");a.href = "javascript:;";// 给 "超链接a、对应文本节点" 建立父子关系a.appendChild(author_textnode);// 创建tr、td元素var tr = document.createElement("tr");var name_td = document.createElement("td");var email_td = document.createElement("td");var salary_td = document.createElement("td");var author_td = document.createElement("td");// 给 "各单元格td、对应文本节点、超链接a" 建立父子关系name_td.appendChild(name_textnode);email_td.appendChild(email_textnode);salary_td.appendChild(salary_textnode);author_td.appendChild(a);// 给tbody、tr、td元素建立父子关系。// 没写thead、tbody、tfoot时,编译器会自动添加, 所以记得是tbody而不是table。tr.appendChild(name_td);tr.appendChild(email_td);tr.appendChild(salary_td);tr.appendChild(author_td);tbody.appendChild(tr);// 实现删除 "添加信息后的当前表格数据" 的按钮功能var all_anchor = document.getElementsByTagName("a");for (var i = 0; i < all_anchor.length; i++) {all_anchor[i].onclick = delete_tr;}}}</script>
</head><body><table><thead><tr><td>姓名</td><td>邮件</td><td>工资</td><td>&nbsp</td></tr></thead><tbody><tr><td>Tom</td><td>tom@tom.com</td><td>5000</td><td><a href="">删除</a></td></tr><tr><td>Jerry</td><td>jerry@sohu.com</td><td>8000</td><td><a href="">删除</a></td></tr><tr><td>Bob</td><td>bob@tom.com</td><td>10000</td><td><a href="">删除</a></td></tr></tbody></table><br><br><form action=""><div class="title">添加新员工</div><ul><li>姓名:<input type="text" class="name"></li> <br><li>邮件:<input type="text" class="email"></li> <br><li>工资:<input type="text" class="salary"></li> <br></ul><div class="button_position"><input type="button" value="添加信息" id="add_info"></div></form></body></html>

用传统造节点的方式会使得JS部分代码臃肿,逻辑复杂。因此可将JS代码优化,效果如下:

 <script>// 创建一个 "删除一行表格数据" 功能的函数function delete_tr() {// this指向当前调用方法的对象,即:all_anchor[i]。var tr = this.parentNode.parentNode;// 类似于:var name_td = tr.getElementsByTagName("td")[0].innerHTML;var name_td = tr.children[0].innerHTML;var flag = confirm("你确实要删除" + name_td + "吗?");if (flag) {tr.parentNode.removeChild(tr);}// 结束onclick事件跳转,结束语句执行。// 此代码也适用于取消超链接的默认行为,相当于:href = "javascript:;"。return false;}window.onload = function () {// 实现删除 "当前表格数据" 按钮功能var all_anchor = document.getElementsByTagName("a");for (var i = 0; i < all_anchor.length; i++) {all_anchor[i].onclick = delete_tr;}// 获取 "添加信息" 按钮、找到表格、表身体var add_info = document.getElementById("add_info");var table = document.getElementsByTagName("table")[0];var tbody = document.getElementsByTagName("tbody")[0];add_info.onclick = function () {// 定义变量接收来自 "用户的输入值"。// 注意:表单文本框内的属性不能用innerHTML,只能用value。var name = document.getElementsByClassName("name")[0].value;var email = document.getElementsByClassName("email")[0].value;var salary = document.getElementsByClassName("salary")[0].value;var tr = document.createElement("tr");tr.innerHTML = "<td>" + name + "</td>"+ "<td>" + email + "</td>"+ "<td>" + salary + "</td>"+ "<td><a href='javascript:;'>删除</a></td>";tbody.appendChild(tr);// 此方式也能实现效果,但有以下缺点:// 1、添加信息更改了整个表身的全部数据。降低效率。// 2、原先设置表身数据的样式或程序可能会失效。// tbody.innerHTML += "<tr>" + "<td>" + name + "</td>"//     + "<td>" + email + "</td>"//     + "<td>" + salary + "</td>"//     + "<td><a href='javascript:;'>删除</a></td>"//     + "</tr>";// 实现删除 "添加信息后的当前表格数据" 的按钮功能var all_anchor = document.getElementsByTagName("a");for (var i = 0; i < all_anchor.length; i++) {all_anchor[i].onclick = delete_tr;}}}</script>

http://www.lryc.cn/news/279477.html

相关文章:

  • mac上部署单体hbase
  • 【RV1126 学习】SDK/ U-Boot/kernel/rootfs 编译学习
  • Golang 使用 AST 获取方法和参数名以及应用举例
  • DC-DC变换集成电路芯片B34063——工作电压范围宽,静态电流小
  • 强力推荐:本地文件加密软件—超详细加密步骤来了!
  • 在qml中,ListModel可以与WorkerScript一起使用,从多个线程访问列表模型
  • rocketmq实现延迟消息
  • vue倒计时60秒改变按钮状态效果demo(整理)
  • 多区域isis配置实验
  • Ubuntu 22.04.3 LTS arm64 aarch64 ISO jammy-desktop-arm64.iso 下载
  • 软件测试面试必备知识
  • 4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案
  • K8S集群重新初始化--详细过程
  • 服务器 Linux常见指令
  • C++合并K个有序链表
  • win10在启动游戏时报错,提示“d3dx9_25.dll文件丢失”,怎么办?d3dx9_25.dll丢失如何自动修复
  • 16. 蒙特卡洛强化学习基本概念与算法框架
  • QT中程序执行时间精准计算的三种方法及对比
  • js下载方法分享*
  • C# Stopwatch类_性能_时间计时器
  • 鸿蒙原生应用再添新丁!天眼查 入局鸿蒙
  • HarmonyOS4.0——ArkUI应用说明
  • 基于模块自定义扩展字段的后端逻辑实现(二)
  • 图像中部分RGB矩阵可视化
  • RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用
  • 聚焦老年生活与健康,“老有所依·情暖夕阳”元岗街社区微型养老博览会顺利开展
  • 记录汇川:H5U与Factory IO测试12
  • PingCAP 受邀参加 FICC 2023,获 Open100 世纪全球开源贡献奖
  • 10-skywalking告警
  • vue前端开发自学,插槽练习第二次,name属性的使用