Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
使用JavaScript动态管理和渲染对象到HTML表格的教程_创想鸟

使用JavaScript动态管理和渲染对象到HTML表格的教程

使用javascript动态管理和渲染对象到html表格的教程

本教程详细介绍了如何使用JavaScript构建一个简单的图书管理系统,通过面向对象的方式定义图书,并将新增的图书对象动态渲染到HTML表格中。文章涵盖了数据模型定义、数据存储、DOM操作以及事件监听,旨在帮助开发者理解如何高效地管理前端数据并实时更新用户界面。

1. 引言:构建动态图书列表

在现代Web应用开发中,动态地展示和管理数据是常见的需求。本教程将以一个“我的图书馆”项目为例,演示如何利用JavaScript的面向对象特性来创建数据模型,并通过DOM操作将这些数据实时呈现在HTML表格中。我们将学习如何定义图书对象、存储这些对象,并响应用户输入来更新表格内容。

2. 核心概念与数据模型

2.1 定义图书对象

首先,我们需要一个蓝图来表示每一本书。在JavaScript中,这可以通过构造函数来实现。Book 构造函数将用于创建具有 title(书名)、author(作者)和 pages(页数)属性的图书实例。

function Book(title, author, pages) {  this.title = title;  this.author = author;  this.pages = pages;}

2.2 存储图书数据

为了管理多本图书,我们需要一个地方来存储这些 Book 实例。一个简单的数组 (bookArray) 是一个理想的选择。

立即学习“Java免费学习笔记(深入)”;

const bookArray = [];

2.3 添加图书到库中

addBookToLibrary 函数负责创建新的 Book 实例并将其添加到 bookArray 中。

function addBookToLibrary(title, author, pages) {  const book = new Book(title, author, pages);  bookArray.push(book);  return book; // 返回新创建的图书对象}

3. HTML结构:表单与表格

为了用户能够输入图书信息并查看列表,我们需要相应的HTML结构。

3.1 输入表单

一个简单的表单,包含书名、作者和页数的输入字段,以及一个提交按钮。

        


3.2 图书列表表格

一个用于展示图书信息的表格。为了方便JavaScript动态更新,我们为表格的

元素添加一个 id。

Title Author Pages

注意事项: 在原始问题中,HTML结构可能存在将

元素直接添加到

标签或表格外的非

区域的问题。为了确保HTML的语义正确性和良好的浏览器兼容性,我们强烈建议将动态生成的表格行()插入到内的元素中。上述HTML结构已对此进行了修正。

4. 动态更新表格内容

updateTable 函数是实现动态渲染的核心。它负责清空现有表格内容,然后遍历 bookArray 中的所有图书,为每本书创建一行并将其添加到表格中。

function updateTable() {  // 获取表格的 tbody 元素  const tableBody = document.getElementById("bookTableBody");  // 清空现有表格内容,防止重复添加  tableBody.innerHTML = "";  // 遍历 bookArray 中的每一本书  for (const book of bookArray) {    // 创建一个新的表格行    const row = document.createElement("tr");    // 使用模板字符串填充行内容    row.innerHTML = `      ${book.title}      ${book.author}      ${book.pages}    `;    // 将新行添加到表格的 tbody 中    tableBody.appendChild(row);  }}

5. 事件处理:响应用户输入

当用户点击“Submit”按钮时,我们需要捕获表单数据,创建新的图书对象,并更新表格。

document.getElementById("submit").addEventListener("click", function(event) {  // 阻止表单默认提交行为,避免页面刷新  event.preventDefault();  // 获取表单输入的值  const title = document.getElementById("title").value;  const author = document.getElementById("author").value;  const pages = document.getElementById("pages").value;  // 校验输入(可选,但推荐)  if (!title || !author || !pages) {      alert("请填写所有字段!");      return;  }  // 添加新书到数组  addBookToLibrary(title, author, pages);  // 更新表格显示  updateTable();  // 清空表单字段,方便下次输入  document.getElementById("title").value = "";  document.getElementById("author").value = "";  document.getElementById("pages").value = "";});

6. 完整代码示例

将以上所有部分组合起来,构成一个完整的HTML文件和JavaScript文件。

index.html

                My Library            table {            width: 100%;            border-collapse: collapse;            margin-top: 20px;        }        th, td {            border: 1px solid #ddd;            padding: 8px;            text-align: left;        }        th {            background-color: #f2f2f2;        }        form label {            display: inline-block;            width: 60px;            margin-bottom: 5px;        }        form input[type="text"] {            margin-bottom: 10px;            width: 200px;            padding: 5px;        }        form input[type="submit"] {            padding: 8px 15px;            background-color: #4CAF50;            color: white;            border: none;            cursor: pointer;        }        form input[type="submit"]:hover {            background-color: #45a049;        }        

My Library Book List

这是一个使用面向对象JavaScript构建的简单图书管理项目。






Title Author Pages

script.js

// 存储图书对象的数组const bookArray = [];// Book 构造函数,用于创建图书对象function Book(title, author, pages) {  this.title = title;  this.author = author;  this.pages = pages;}// 将新书添加到 bookArray 中function addBookToLibrary(title, author, pages) {  const book = new Book(title, author, pages);  bookArray.push(book);  return book;}// 更新 HTML 表格以显示 bookArray 中的所有图书function updateTable() {  const tableBody = document.getElementById("bookTableBody");  tableBody.innerHTML = ""; // 清空现有内容  for (const book of bookArray) {    const row = document.createElement("tr");    row.innerHTML = `      ${book.title}      ${book.author}      ${book.pages}    `;    tableBody.appendChild(row);  }}// 监听表单提交事件document.getElementById("submit").addEventListener("click", function(event) {  event.preventDefault(); // 阻止默认的表单提交行为  const title = document.getElementById("title").value;  const author = document.getElementById("author").value;  const pages = document.getElementById("pages").value;  if (!title || !author || !pages) {      alert("请填写所有字段!");      return;  }  addBookToLibrary(title, author, pages); // 添加新书  updateTable(); // 更新表格显示  // 清空表单字段  document.getElementById("title").value = "";  document.getElementById("author").value = "";  document.getElementById("pages").value = "";});// 页面加载时初始化表格(如果 bookArray 中有预设数据)// 例如,可以添加一些初始数据:// addBookToLibrary("The Hobbit", "J.R.R. Tolkien", 310);// addBookToLibrary("1984", "George Orwell", 328);updateTable(); // 首次加载时调用,确保表格显示最新数据

7. 总结与最佳实践

通过本教程,我们学习了如何使用JavaScript有效地管理数据和更新UI。以下是一些关键的总结和最佳实践:

面向对象设计: 使用构造函数(如 Book)来定义数据模型,使代码更具结构性和可维护性。数据与视图分离: 将数据(bookArray)的存储和操作与DOM的渲染逻辑(updateTable)分开,提高代码的清晰度。动态DOM操作: 掌握 document.createElement(), element.appendChild(), element.innerHTML 等方法,它们是动态更新网页内容的基础。事件监听: 使用 addEventListener() 捕获用户交互,并触发相应的逻辑。阻止默认行为: 对于表单提交等会刷新页面的事件,使用 event.preventDefault() 是非常重要的。语义化HTML: 确保HTML结构符合语义标准,例如,将表格行放入 中,这有助于浏览器正确解析和渲染页面,也利于可访问性。清空与重绘: 在更新表格时,先清空现有内容 (tableBody.innerHTML = “”) 再重新绘制是常见的模式,确保数据与UI同步。

掌握这些技术,您将能够构建更具交互性和动态性的Web应用程序。

以上就是使用JavaScript动态管理和渲染对象到HTML表格的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1531660.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
客户端授权检查的风险与服务端安全实践
上一篇 2025年12月20日 23:01:23
JavaScript与HTML交互中的常见陷阱及优化实践
下一篇 2025年12月20日 23:01:34

相关推荐

  • mysql中*是什么意思 mysql星号通配符解析

    在 mysql 中,星号()最常用于 select 语句中代表所有列,但应谨慎使用。1)它方便查看所有数据,但可能返回不必要的数据,影响性能。2)使用可能降低代码可维护性,建议明确列出所需列。3)在like操作符中,不是通配符,需用regexp。4)在视图中使用可能导致定义失效。5)可结合limit…

    2026年9月24日
    000
  • 抖音怎么下载视频?抖音怎么提取别人的视频

    抖音作为一个热门的短视频社交平台,凭借其多样化的短视频内容吸引了众多用户。部分用户在浏览抖音视频时,希望能将其保存下来以供后续观看。那么,如何在抖音上下载视频呢?接下来,本文将详细介绍几种下载抖音视频的方法以及相关的注意事项。 一、抖音视频下载方法 使用抖音官方提供的下载功能 抖音自身具备下载功能,…

    2026年9月24日
    400
  • google浏览器怎么把网页保存为PDF_google浏览器网页保存为PDF方法

    使用Chrome将网页保存为PDF,首先按Ctrl+P进入打印界面,选择“另存为PDF”并调整设置后保存;也可通过F12打开开发者工具,截取指定元素或完整页面截图后转为PDF;还可安装“Save as PDF”等扩展程序实现更高质量的导出。 如果您希望将当前浏览的网页完整保存以便离线查看或分享,Go…

    2026年9月24日
    000
  • windows怎么关闭cortana进程_彻底关闭小娜(cortana)后台进程的方法

    1、可通过任务管理器结束Cortana进程并禁用其启动项;2、修改注册表或组策略可永久关闭;3、重命名系统目录文件夹可阻止其运行。 如果您发现Windows系统中Cortana(小娜)后台进程占用资源或影响系统性能,可能是该服务在后台持续运行。以下是彻底关闭Cortana进程的操作步骤: 本文运行环…

    2026年9月24日
    800
  • 苹果过时产品名单更新,M5 iPad Pro 开箱视频流出

    苹果过时产品名单更新,M5 iPad Pro 开箱视频流出苹果过时产品名单更新,M5 iPad Pro 开箱视频流出苹果过时产品名单更新,M5 iPad Pro 开箱视频流出苹果过时产品名单更新,M5 iPad Pro 开箱视频流出

    日前,苹果已将 iphone 11 pro max 和 apple watch series 3 的所有型号列入“过时产品”(vintage product)行列。 根据苹果的规定,一款产品在停止销售满 5 年后,可能会被归为“过时产品”。不过,这一分类并不会显著影响售后服务——苹果仍会继续为这些设…

    2026年9月24日 • 用户投稿
    600
  • Java语法基础中如何导入其他包中的类

    使用import关键字可导入其他包中的类,如import java.util.ArrayList;2. 通过import java.util.*可导入整个包;3. 不导入时可用全限定名访问类,但不推荐;4. 类名冲突时需使用全限定名区分,如java.sql.Date。 在Java中使用其他包中的类,…

    2026年9月24日
    1100
  • uc浏览器如何清除指定的网站数据_UC浏览器定点清除网站Cookie与缓存

    可针对特定网站清理缓存或Cookie解决UC浏览器访问异常。1、进入设置→隐私与安全→管理网站数据,搜索目标网站并清除其数据;2、使用无痕浏览模式访问网站,避免数据残留;3、通过文件管理器手动删除UC浏览器缓存目录下对应域名的缓存文件夹。 如果您在使用UC浏览器访问某些网站时遇到加载异常、登录状态失…

    2026年9月24日
    000
  • MAC系统怎么开启防火墙_MAC开启防火墙教程

    1、建议在Mac系统中开启防火墙以提升网络安全,可通过“系统设置”中的“网络-防火墙”选项启用;2、高级用户可使用终端命令sudo /usr/libexec/ApplicationFirewall/socketfilterfw –setglobalstate on开启服务;3、启用后可在…

    2026年9月24日
    100
  • VSCode的扩展设置是全局的还是局部的?

    VSCode扩展设置默认全局生效,存储于用户配置文件中,但部分扩展如ESLint、Prettier和Python支持项目级局部配置,通过在项目根目录的.vscode/settings.json文件中定义,可覆盖全局设置;在设置界面中,齿轮图标表示可被工作区覆盖,锁图标表示仅限全局修改,用户可根据需求…

    2026年9月24日
    200
  • 如何在iPhone8设置密码?为老款iPhone设置安全锁的完整指南

    答案:在iPhone 8上设置密码需进入“设置”→“触控 ID 与密码”→“打开密码”,并选择6位、4位、自定义数字或字母数字密码以提升安全性,推荐使用复杂密码并开启触控 ID;如需更改密码,进入相同菜单选择“更改密码”并重新输入新密码,若要关闭密码,可点击“关闭密码”但会降低安全性;若忘记密码,唯…

    2026年9月24日
    100
  • Java Map.entrySet遍历性能优化

    使用增强for循环遍历Map.entrySet()更高效,避免显式声明Iterator;提前缓存key和value减少重复调用;优先选用HashMap提升性能;大数据量可考虑parallelStream并行处理,但需权衡开销。 在Java中,Map.entrySet() 是遍历键值对最常用的方式之一…

    2026年9月24日
    100
  • 俄罗斯搜索引擎入口 俄罗斯Yandex浏览器官网在线进入

    俄罗斯搜索引擎Yandex的官网入口是https://yandex.com/,该平台提供多语言搜索、地图、新闻聚合和翻译工具,其浏览器以轻量、快速、广告过滤和高兼容性为优势,搜索支持多类型内容精准查找与安全防护。 俄罗斯搜索引擎入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来俄罗斯Ya…

    2026年9月24日
    200
  • 抖音水印怎么去掉?抖音水印在哪里关闭

    随着抖音的广泛使用,越来越多的人选择在这个平台上分享生活点滴。然而,在保存或转发视频时,常常会遇到水印问题,这不仅影响了视频的整体观感,也可能带来隐私风险。本文将为您详细讲解几种去除抖音视频水印的方法,帮助您轻松还原视频原本面貌。 一、常见的去水印方式 借助第三方工具软件 目前市面上有不少专门用于去…

    2026年9月24日
    600
  • Java泛型擦除机制对对象类型的影响

    泛型擦除使Java在编译后移除类型信息,导致运行时无法判断具体泛型类型,影响类型检查、反射获取及继承多态,需通过桥接方法等机制保证一致性。 Java的泛型擦除机制在编译期会移除泛型类型信息,导致运行时无法获取具体的泛型参数类型。这一机制直接影响了对象类型的判断、反射操作以及继承中的类型处理。 泛型擦…

    2026年9月24日
    300
  • PHP实时输出如何防止XSS攻击_PHP实时输出安全防范XSS攻击

    防止XSS攻击需坚持三重防护:首先对用户输入进行严格验证与白名单过滤,使用filter_var等函数校验数据格式;其次根据输出上下文进行恰当转义——HTML正文和属性用htmlspecialchars(),JavaScript变量用json_encode(),URL参数用urlencode();最后…

    2026年9月24日
    100
  • UC浏览器历史记录最多能保存多久_UC浏览器历史记录保存时长说明

    UC浏览器本地历史记录默认保留约30天,超出后自动清理;通过开启云同步功能可长期保存并跨设备恢复;重要记录建议手动导出、截图或收藏以防丢失。 如果您发现UC浏览器中的历史记录无法找到,或者想了解其保存机制以决定是否需要手动备份,这通常与浏览器的自动清理策略和用户设置有关。以下是关于UC浏览器历史记录…

    2026年9月24日
    000
  • Java Optional.orElse与orElseGet区别

    orElse总是执行默认值计算,而orElseGet仅在Optional为空时调用Supplier获取,默认值构造 costly 时应优先使用orElseGet以避免性能浪费。 在 Java 8 引入的 Optional 类中,orElse 和 orElseGet 都用于在 Optional 值为空…

    2026年9月24日
    000
  • VSCode如何优化多语言混编 VSCode复合工程项目的管理技巧

    #%#$#%@%@%$#%$#%#%#$%@_e2fc++805085e25c9761616c00e065bfe8处理多语言混编和复杂项目的核心策略是使用多根工作区(multi-root workspace),通过创建.code-workspace文件将不同语言或模块的目录统一管理,实现跨项目文件浏…

    2026年9月24日
    000
  • Java中接口常量和类常量的使用区别

    接口常量默认public static final,用于行为契约但易导致职责模糊;类常量可用不同访问修饰符,更适合封装和维护。现代Java推荐使用专用常量类、枚举、私有静态常量或配置文件管理常量,以提升代码清晰度与可维护性。 Java中接口常量和类常量,核心区别在于它们的定义位置和隐式属性。接口常量…

    2026年9月24日
    000
  • 处理PHP多线程的定时任务并行_优化php多线程怎么实现的定时任务执行

    PHP可通过多进程、消息队列等方式实现定时任务并行处理。1. 使用pthreads扩展(需ZTS支持)可在CLI环境实现多线程,但部署复杂;2. 利用pcntl_fork创建子进程是推荐方案,通过fork多个进程并行执行任务,适合CLI模式;3. 通过crontab同时触发多个独立脚本或使用exec…

    2026年9月24日
    200

发表回复

登录后才能评论
关注微信