本任务的目标是深入了解文档对象模型(DOM),阐明其在网页开发中的重要性,并通过实际示例掌握DOM的操作方法。通过对DOM的了解,可以有效地用JavaScript进行网页交互设计,使网页在用户操作时具有动态变化的效果。
知识回顾
-
什么是DOM: DOM代表文档对象模型,是一个用于HTML和XML文档的编程接口。它将文档表示为一个树形结构,其中每个节点都是文档的一部分,包括元素、属性和文本。通过DOM,开发者可以使用JavaScript等编程语言动态访问和更新网页的内容、结构和样式。
-
DOM的基本组成:
- 节点(Node): DOM中的基本单位,包含元素节点、文本节点、属性节点等。
- 文档节点(Document): 代表整个文档的顶层节点,是DOM树的根节点。
- 元素节点(Element): 代表HTML或XML中的标签,例如
<div>、<p>等。 - 文本节点(Text): 代表元素中的文本内容。
-
DOM操作: 使用JavaScript可以轻松地对DOM进行操作,主要包括以下几个常用方法:
-
获取元素:
document.getElementById(id):根据ID获取元素。document.getElementsByClassName(className):根据类名获取元素集合。document.getElementsByTagName(tagName):根据标签名称获取元素集合。document.querySelector(selectors):根据CSS选择器获取匹配的第一个元素。document.querySelectorAll(selectors):根据CSS选择器获取所有匹配的元素。
-
创建和添加元素:
document.createElement(tagName):创建新的元素节点。parentNode.appendChild(newNode):将新节点添加到父节点的末尾。parentNode.insertBefore(newNode, referenceNode):在参考节点之前插入新节点。
-
修改元素:
element.innerHTML:获取或设置元素的HTML内容。element.style:获取或设置元素的内联样式。element.setAttribute(name, value):设置元素的属性。
-
删除元素:
parentNode.removeChild(childNode):从父节点中删除子节点。
-
任务描述
本案例通过JavaScript的DOM操作,展示了如何构建一个交互式的图书管理网页。用户可以添加、查看和删除书籍,体验DOM带来的页面实时更新能力。通过实际编码,学习者将掌握DOM元素的选择、创建、修改及事件处理等关键技能。
任务准备
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>图书列表</title>
<style>
body {
font-family: 'Arial', sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
h1 {
text-align: center;
color: #333;
margin-bottom: 20px;
}
.container {
max-width: 600px;
margin: 0 auto;
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
input[type="text"] {
width: 45%;
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
.button-container {
text-align: center; /* 按钮容器居中 */
}
button {
width: 48%;
padding: 10px;
margin: 10px 1%;
border: none;
border-radius: 4px;
background-color: #28a745;
color: white;
cursor: pointer;
transition: background-color 0.3s;
}
button:hover {
background-color: #218838; /* 悬停效果 */
}
#bookList {
list-style-type: none;
padding: 0;
margin-top: 20px;
}
#bookList li {
padding: 10px;
margin: 5px 0;
display: flex;
justify-content: space-between;
align-items: center;
background: #e9ecef;
border-radius: 4px;
transition: background-color 0.3s;
}
#bookList li:hover {
background: #d6d8db; /* 悬停效果 */
}
#bookList button {
background-color: #dc3545;
}
#bookList button:hover {
background-color: #c82333;
}
</style>
</head>
<body>
<h1>图书列表</h1> <!-- 修改标题 -->
<div class="container">
<input type="text" id="titleInput" placeholder="书籍名称" />
<input type="text" id="authorInput" placeholder="作者" />
<div class="button-container"> <!-- 新增按钮容器 -->
<button id="addBookBtn">添加书籍</button>
</div>
<ul id="bookList"></ul>
</div>
</body>
</html>
任务实施
1. 设计功能
- 用户能够输入书籍名称和作者,并点击“添加书籍”按钮。
- 系统能够将输入的书籍信息添加到列表中并显示。
- 用户可以点击“删除”按钮,删除已添加的书籍。
2. 实现步骤
// 获取DOM元素
const titleInput = document.getElementById("titleInput");
const authorInput = document.getElementById("authorInput");
const addBookBtn = document.getElementById("addBookBtn");
const bookList = document.getElementById("bookList");
1. 获取 DOM 元素
document.getElementById():这是一个获取页面中元素的方法,通过元素的 ID 来找到对应的 DOM 元素。titleInput、authorInput、addBookBtn、bookList:这些常量分别对应输入框、按钮和书籍列表的 DOM 元素,后续将通过这些引用进行操作。
2. 添加书籍的函数
function addBook() {
const title = titleInput.value.trim();
const author = authorInput.value.trim();
// 输入验证
if (title === "" || author === "") {
alert("书籍名称和作者不能为空!");
return;
}
-
函数
addBook():定义了一个函数,用于添加书籍。 -
获取输入框的值:
titleInput.value.trim():获取书籍名称的输入内容,并使用trim()方法去除首尾空格。authorInput.value.trim():同样操作获取作者名称。
-
输入验证:
- 通过
if语句检查书籍和作者名称是否为空。如果任一字段为空,则弹出警告框提示用户,并使用return结束该函数,避免后续的操作。
- 通过
3. 创建列表项和删除按钮
// 创建新的列表项
const li = document.createElement("li");
li.textContent = `书籍:${title} - 作者:${author}`;
-
创建新的列表项:
document.createElement("li"):创建一个新的列表项(<li>)元素。li.textContent:将书籍的名称和作者信息填充到新创建的列表项中。使用模板字符串(反引号)创建一个易读的格式。
4. 创建删除按钮
// 创建删除按钮
const deleteBtn = document.createElement("button");
deleteBtn.textContent = "删除";
deleteBtn.onclick = function() {
bookList.removeChild(li);
};
-
创建删除按钮:
document.createElement("button"):创建一个新的按钮元素。deleteBtn.textContent:设置按钮文本为“删除”。
-
按钮事件处理:
- 将一个匿名函数绑定到删除按钮的
onclick事件。当用户点击该按钮时,该函数将执行。 bookList.removeChild(li):调用removeChild方法从书籍列表中删除对应的列表项,使得用户可以移除不需要的书籍。
- 将一个匿名函数绑定到删除按钮的
5. 添加列表项到书籍列表
li.appendChild(deleteBtn);
bookList.appendChild(li);
li.appendChild(deleteBtn):将删除按钮添加到新创建的书籍列表项中,使其显示在相应的列表项旁边。bookList.appendChild(li):将新创建的列表项(包含书籍名称和删除按钮)添加到书籍列表。
6. 清空输入框
// 清空输入框
titleInput.value = "";
authorInput.value = "";
}
- 清空输入框:在成功添加书籍后,将书籍名称和作者的输入框重置为空字符串,方便用户输入新书籍。
7. 绑定按钮和键盘事件
// 绑定按钮点击事件
addBookBtn.onclick = addBook;
// 支持按回车键添加书籍
titleInput.addEventListener("keypress", function(event) {
if (event.key === "Enter") {
addBook();
}
});
authorInput.addEventListener("keypress", function(event) {
if (event.key === "Enter") {
addBook();
}
});
-
按钮点击事件:将
addBook函数绑定到“添加书籍”按钮的点击事件。当按钮被点击时,addBook函数将被调用,执行上述添加书籍的逻辑。 -
键盘事件:
- 使用
addEventListener方法为书籍名称和作者的输入框添加keypress事件监听器。 - 当用户按下键盘的“Enter”键时(
event.key === "Enter"),调用addBook()函数,达到输入书籍时可以直接通过回车添加的机制。
- 使用
实验实训
任务要求:
- 创建一个简单的通讯录管理。
- 用户可以输入联系人姓名和电话,并将其添加到列表中。
- 每个联系人旁边有一个删除按钮,用户可以删除相应的联系人。
- 实现列表项的高亮显示效果(在悬停时)。