0

0

JavaScript对象与HTML表格动态渲染:构建交互式图书列表

碧海醫心

碧海醫心

发布时间:2025-10-22 09:33:28

|

397人浏览过

|

来源于php中文网

原创

JavaScript对象与HTML表格动态渲染:构建交互式图书列表

本教程详细介绍了如何使用javascript构建一个动态的图书列表应用。通过面向对象编程思想定义图书对象,利用数组存储数据,并结合dom操作实现html表格的实时更新。文章涵盖了数据模型、表单交互、dom元素创建与管理等核心概念,旨在帮助读者理解如何将javascript对象数据高效地呈现在网页表格中,提升用户体验。

引言

在现代Web开发中,动态地展示和管理数据是常见的需求。本教程将引导您构建一个简单的“我的图书馆”应用,通过JavaScript实现图书信息的添加、存储,并将其实时呈现在HTML表格中。我们将重点讲解如何使用JavaScript对象来组织数据,以及如何通过DOM操作高效地更新网页内容。

核心概念

在深入代码实现之前,我们首先了解几个核心概念:

  1. JavaScript构造函数与对象:用于创建具有相同属性和方法的“图书”实例。
  2. 数据存储:使用JavaScript数组来保存所有图书对象。
  3. DOM操作:通过JavaScript修改HTML文档结构,例如创建新的表格行和单元格。
  4. 事件监听:捕获用户在表单中的提交行为,并触发相应的JavaScript逻辑。

HTML结构

首先,我们需要一个基础的HTML页面来承载我们的应用。这包括一个标题、一个用于输入图书信息的表单,以及一个用于显示图书列表的表格。




    
    
    
    我的图书馆
    


    

我的图书馆藏书列表

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

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

MusicLM
MusicLM

谷歌平台的AI作曲工具,用文字生成音乐

下载





书名 作者 页数

HTML结构说明:

  • form 元素被赋予 id="bookForm",其中输入字段的 id 分别为 titleInput、authorInput 和 pagesInput,提交按钮的 id 为 submitBtn。
  • table 元素被赋予 id="myBooksTable"。为了更好地管理动态内容,我们添加了一个 tbody 元素,并为其指定 id="bookListBody"。所有图书数据行都将插入到这个 tbody 中。

JavaScript实现

接下来是核心的JavaScript逻辑,它负责处理数据、更新DOM。

// script.js

// 用于存储所有图书对象的数组
const bookArray = [];

/**
 * Book 构造函数
 * 用于创建新的图书对象
 * @param {string} author - 作者
 * @param {string} title - 书名
 * @param {number} pages - 页数
 */
function Book(author, title, pages) {
  this.author = author;
  this.title = title;
  this.pages = pages;
}

/**
 * addBookToLibrary 函数
 * 创建一个新的 Book 对象并将其添加到 bookArray 数组中
 * @param {string} title - 书名
 * @param {string} author - 作者
 * @param {number} pages - 页数
 * @returns {Book} 返回新创建的 Book 对象
 */
function addBookToLibrary(title, author, pages) {
  const book = new Book(author, title, pages);
  bookArray.push(book);
  return book;
}

/**
 * updateTable 函数
 * 根据 bookArray 中的数据动态更新 HTML 表格
 */
function updateTable() {
  const tableBody = document.getElementById("bookListBody");
  // 清空表格现有内容,防止重复添加
  tableBody.innerHTML = ""; 

  // 遍历 bookArray 中的所有图书,为每本书创建一行
  for (const book of bookArray) {
    const row = document.createElement("tr"); // 创建新的表格行
    row.innerHTML = `
      ${book.title}
      ${book.author}
      ${book.pages}
    `;
    tableBody.appendChild(row); // 将新行添加到表格体中
  }
}

// 监听表单提交事件
document.getElementById("submitBtn").addEventListener("click", function(event) {
  event.preventDefault(); // 阻止表单默认提交行为(页面刷新)

  // 获取表单输入值
  const title = document.getElementById("titleInput").value;
  const author = document.getElementById("authorInput").value;
  const pages = document.getElementById("pagesInput").value;

  // 简单的输入验证
  if (title && author && pages) {
    addBookToLibrary(title, author, pages); // 添加图书到数组
    updateTable(); // 更新表格显示

    // 清空表单字段,方便用户输入下一本书
    document.getElementById("titleInput").value = "";
    document.getElementById("authorInput").value = "";
    document.getElementById("pagesInput").value = "";
  } else {
    alert("请填写所有图书信息!");
  }
});

// 页面加载时初始化表格显示(如果 bookArray 中有初始数据)
updateTable();

JavaScript实现说明:

  1. bookArray:一个全局数组,用于存储所有 Book 对象。
  2. Book 构造函数:定义了图书对象的结构,包含 author、title 和 pages 属性。
  3. addBookToLibrary(title, author, pages):此函数负责创建 Book 实例并将其添加到 bookArray 中。它将数据模型(Book 对象)的创建与数据存储(bookArray)逻辑清晰地分离。
  4. updateTable():这是实现动态更新的关键函数。
    • 它首先获取 id="bookListBody" 的 tbody 元素。
    • tableBody.innerHTML = ""; 清空了 tbody 内部的所有现有行,确保每次更新都是从空白状态开始重新渲染,避免重复。
    • 通过 for...of 循环遍历 bookArray 中的每个 book 对象。
    • 对于每个 book,它创建一个新的 元素,并使用模板字面量(template literal)填充其 innerHTML,包含 元素来显示书名、作者和页数。
    • 最后,将新创建的 元素添加到 tableBody 中。
    • 事件监听器
      • 通过 document.getElementById("submitBtn").addEventListener("click", ...) 监听提交按钮的点击事件
      • event.preventDefault() 是非常重要的,它阻止了表单的默认提交行为,即页面刷新。如果没有这一行,每次点击提交按钮,页面都会刷新,导致JavaScript添加的数据丢失
      • 获取输入框的值,进行基本验证后,调用 addBookToLibrary 添加图书,然后调用 updateTable 刷新表格显示。
      • 为了更好的用户体验,提交成功后清空了表单字段。
    • 初始化调用:在脚本末尾调用 updateTable(),确保页面加载时表格能够显示任何初始数据(尽管当前 bookArray 是空的,但这是一个良好的实践)。
    • 注意事项

      • this 关键字的上下文:在原始问题中,addBookToLibrary 函数内部对 this 的使用存在混淆。在JavaScript中,this 的值取决于函数被调用的方式。在构造函数(如 Book)中,this 指向新创建的实例。但在普通函数或事件监听器中,this 可能指向全局对象(非严格模式)或 undefined(严格模式),或者事件的目标元素。本教程的解决方案通过将数据模型(Book 构造函数)和视图更新逻辑(updateTable 函数)分离,并使用明确的变量(如 bookArray)来管理数据,避免了 this 上下文带来的困扰。
      • DOM ID 的唯一性:HTML元素的 id 属性在文档中必须是唯一的。原始代码中在多个 上使用了相同的 id,这是不规范的。在动态生成表格行时,我们不应为每个 都赋予 id,而是通过其在 中的位置来访问它们。
      • 性能优化:对于大型数据集,频繁地清空 innerHTML 并重新构建表格可能会影响性能。更高级的优化方法包括只添加或删除变化的行,或者使用文档片段(DocumentFragment)来批量操作DOM。但对于本示例的规模,当前方法已经足够。
      • 用户体验:添加输入验证(如本例中的非空检查)和提交后清空表单字段,可以显著提升用户体验。
      • 总结

        通过本教程,您学习了如何利用JavaScript的面向对象特性(构造函数)、数组数据结构以及DOM操作来构建一个交互式的图书列表应用。我们涵盖了从HTML结构搭建到JavaScript逻辑实现的完整过程,包括数据存储、动态表格更新和事件处理。掌握这些技术是进行前端数据展示和管理的基础,为构建更复杂的Web应用奠定了坚实的基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

52

2025.11.27

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

539

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

21

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

28

2026.01.06

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

5393

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

3088

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

615

2025.12.25

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号