新闻中心
J*aScript DOM操作:向列表项动态添加用户输入和删除按钮

本文将详细介绍如何使用j*ascript进行dom操作,实现在网页中动态创建列表项(`
引言:动态列表的需求
在现代Web应用开发中,动态生成和管理内容是常见的需求。例如,一个待办事项列表、事件规划器或评论区,都需要用户能够输入信息,并将其显示在一个列表中,同时通常会提供一个操作按钮(如“删除”或“编辑”)来管理该列表项。实现这一功能的核心在于J*aScript对文档对象模型(DOM)的精确操作。
核心概念:DOM元素创建与追加
要动态地向网页添加内容,我们需要掌握以下几个关键的DOM操作方法:
- document.createElement(tagName):用于创建一个指定标签名的HTML元素节点。例如,document.createElement('li')会创建一个
- 元素。
- document.createTextNode(text):用于创建一个包含指定文本内容的文本节点。这比直接设置innerHTML更安全,尤其是在处理用户输入时,可以避免潜在的XSS攻击。
- element.appendChild(childElement):将一个子节点追加到指定父节点的末尾。这是构建元素层级结构的关键方法。理解父子关系至关重要,一个元素必须先被创建,然后才能被追加到其父元素中。
问题解析:元素追加的常见遗漏
在实现动态列表项时,开发者常犯的一个错误是只将用户输入的文本追加到新创建的
实现步骤与代码示例
下面我们将通过一个完整的待办事项列表示例,演示如何正确地将用户输入和删除按钮添加到同一个
秀脸FacePlay
一款集成AI换脸、照片跳舞等多种AI特效玩法的App
124
查看详情
1. HTML结构
首先,我们需要一个基本的HTML骨架,包括一个输入框、一个提交按钮和一个用于显示待办事项的有序列表(
- )容器。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动态待办事项列表</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 20px; background-color: #f4f7f6; color: #333; }
h1 { color: #2c3e50; }
#todoForm { margin-bottom: 25px; display: flex; gap: 10px; }
#todoInput { flex-grow: 1; padding: 10px 12px; border: 1px solid #ccc; border-radius: 5px; font-size: 1rem; }
#todoForm button { padding: 10px 20px; background-color: #28a745; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 1rem; transition: background-color 0.2s ease; }
#todoForm button:hover { background-color: #218838; }
ol { list-style: decimal; padding-left: 25px; }
li { margin-bottom: 12px; display: flex; align-items: center; background-color: #ffffff; padding: 10px 15px; border-radius: 5px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
li span { flex-grow: 1; font-size: 1.1rem; color: #34495e; }
li button { margin-left: 20px; padding: 8px 15px; background-color: #dc3545; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 0.9rem; transition: background-color 0.2s ease; }
li button:hover { background-color: #c82333; }
</style>
</head>
<body>
<h1>我的待办事项</h1>
<form id="todoForm">
<input type="text" id="todoInput" placeholder="输入新的待办事项..." autocomplete="off">
<button type="submit">添加</button>
</form>
<ol id="todoList"></ol>
<script src="script.js"></script> <!-- J*aScript文件将在这里加载 -->
</body>
</html>2. J*aScript逻辑
接下来,我们将编写J*aScript代码来处理表单提交,动态创建列表项,并将其添加到页面中。
// script.js
document.addEventListener('DOMContentLoaded', () => {
// 获取DOM元素引用
const todoInput = document.getElementById('todoInput');
const todoForm = document.getElementById('todoForm');
const todoListContainer = document.getElementById('todoList');
// 监听表单的提交事件
todoForm.addEventListener('submit', (e) => {
e.preventDefault(); // 阻止表单的默认提交行为(页面刷新)
// 获取并清理用户输入
const itemText = todoInput.value.trim();
// 检查输入是否为空
if (itemText === '') {
alert('待办事项不能为空,请输入内容!');
return; // 如果为空,则不执行后续操作
}
// 1. 创建新的列表项 <li> 元素
const newItem = document.createElement('li');
// 2. 创建一个<span>元素来包裹文本,方便样式控制
const textSpan = document.createElement('span');
textSpan.textContent = itemText; //
使用 textContent 设置文本内容,更安全
// 3. 创建删除按钮 <button> 元素
const deleteButton = document.createElement('button');
deleteButton.textContent = '删除'; // 设置按钮文本
// 4. 为删除按钮添加事件监听器
deleteButton.addEventListener('click', () => {
// 当点击删除按钮时,移除其父元素(即整个 <li> 元素)
newItem.remove();
// 或者使用 deleteButton.parentNode.remove();
});
// 5. 将文本<span>和删除按钮都追加到新创建的 <li> 元素中
newItem.appendChild(textSpan);
newItem.appendChild(deleteButton);
// 6. 将完整的 <li> 元素追加到 <ol> 容器中,使其显示在页面上
todoListContainer.appendChild(newItem);
// 7. 清空输入框,方便用户输入下一个事项
todoInput.value = '';
todoInput.focus(); // 重新聚焦输入框
});
});注意事项与最佳实践
- 阻止默认行为:e.preventDefault() 是处理表单提交时非常重要的一步,它能阻止浏览器执行默认的表单提交行为(通常是页面刷新)。
- 清理用户输入:trim() 方法可以移除字符串两端的空白字符,确保即使输入了空格也不会创建空列表项。
- 使用 textContent:当设置元素的纯文本内容时,优先使用 element.textContent 而不是 element.innerHTML。textContent 会自动对特殊字符进行编码,从而防止跨站脚本(XSS)攻击。
- 错误处理:对用户输入进行验证(例如,检查是否为空),并提供相应的反馈,可以提升用户体验。
- 事件委托(高级):对于大量动态生成的元素,为每个元素添加事件监听器可能会影响性能。更高效的做法是使用事件委托,即在父元素上添加一个事件监听器,然后根据事件的目标(e.target)来判断是哪个子元素触发了事件。
- 代码可读性:为变量和函数选择有意义的名称,并添加注释,可以大大提高代码的可读性和可维护性。
总结
通过本文的详细教程,您应该已经掌握了如何使用J*aScript进行DOM操作,以动态地创建包含用户输入文本和操作按钮的列表项。关键在于理解document.createElement()、document.createTextNode()(或textContent)以及element.appendChild()的用法,并确保所有期望在同一父元素内部的子元素都被正确地追加。遵循这些原则,您将能够构建出功能强大且用户友好的动态Web界面。
以上就是J*aScript DOM操作:向列表项动态添加用户输入和删除按钮的详细内容,更多请关注其它相关文章!
# 河北视频网站优化排名
# 正确地
# 输入框
# 连接到
# 如何使用
# 到新
# 移除
# 上海高新科技园网站优化
# 如何推广一个新市场营销
# 为空
# 良心网站推广方案设计
# 广东网站建设概况
# 漳州网站建设哪家靠谱
# 大沥高明网站建设
# 海南网站互联网推广招聘
# 盐城安徽网站优化
# 社交网站怎么推广抖音
# javascript
# 创建一个
# 置顶
# 表单
# 代码可读
# 表单提交
# 应用开发
# ai
# app
# 浏览器
# 编码
# go
# node
# js
# html
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
大象笔记网页版入口 印象笔记网页版登录入口
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
QQ网页版官方账号入口 QQ网页版网页版登录指南
Django表单验证失败时保留用户输入数据的最佳实践
Python Socket多播通信中指定源IP地址的实践指南
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
sublime怎么设置启动时打开的窗口_sublime会话管理与热退出
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】
C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法
汽水音乐在线版入口_汽水音乐网页播放手册
一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证
精准捕获:如何在页面中监听除特定元素外的所有点击事件
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
Golang如何安装Swagger工具_GoSwagger文档生成环境
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
Lar*el Excel导入时生成自定义递增ID的策略与实践
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
Lar*el 递归关系中排除指定分支的教程
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
Mac终端命令大全_Mac常用Terminal指令速查
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
J*aScript map 迭代中检测空数组元素的有效方法
Lar*el Form Request中唯一性验证在更新操作中的正确实现
快手官方唯一登录入口 谨防山寨钓鱼网站
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
yandex入口引擎手机版 yandex安卓版下载入口
理解Python模块与全局变量的作用域管理
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
如何将HTML表格多行数据保存到Google Sheet
优化Log4j2控制台输出性能:解决异步日志瓶颈
从J*aScript对象中精确提取指定属性的教程
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
12306选座怎么选到商务座_12306商务座选择与配置说明
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
在哪找SublimeJ远程工具_SFTP插件配置教程
如何使用Node.js csv 包按条件移除含空字段的CSV记录
小米Civi 4录制视频过暗_小米Civi 4亮度优化
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
蛙漫官方正版入口 蛙漫网页在线全集免费观看
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
b站赚钱渠道_b站收益来源
Python实现多节点属性重叠度分析教程


2025-10-13
浏览次数:次
返回列表
使用 textContent 设置文本内容,更安全
// 3. 创建删除按钮 <button> 元素
const deleteButton = document.createElement('button');
deleteButton.textContent = '删除'; // 设置按钮文本
// 4. 为删除按钮添加事件监听器
deleteButton.addEventListener('click', () => {
// 当点击删除按钮时,移除其父元素(即整个 <li> 元素)
newItem.remove();
// 或者使用 deleteButton.parentNode.remove();
});
// 5. 将文本<span>和删除按钮都追加到新创建的 <li> 元素中
newItem.appendChild(textSpan);
newItem.appendChild(deleteButton);
// 6. 将完整的 <li> 元素追加到 <ol> 容器中,使其显示在页面上
todoListContainer.appendChild(newItem);
// 7. 清空输入框,方便用户输入下一个事项
todoInput.value = '';
todoInput.focus(); // 重新聚焦输入框
});
});