JavaScript DOM操作:向列表项动态添加用户输入和删除按钮

JavaScript DOM操作:向列表项动态添加用户输入和删除按钮

本文将详细介绍如何使用javascript进行dom操作,实现在网页中动态创建列表项(`

`),并同时将用户输入文本和关联的“删除”按钮添加到同一个列表项中。我们将通过代码示例,演示如何正确地创建、设置和嵌套这些html元素,从而构建一个功能完善的动态列表,并解决常见的元素追加遗漏问题。

引言:动态列表的需求

在现代Web应用开发中,动态生成和管理内容是常见的需求。例如,一个待办事项列表、事件规划器或评论区,都需要用户能够输入信息,并将其显示在一个列表中,同时通常会提供一个操作按钮(如“删除”或“编辑”)来管理该列表项。实现这一功能的核心在于JavaScript对文档对象模型(DOM)的精确操作。

核心概念:DOM元素创建与追加

要动态地向网页添加内容,我们需要掌握以下几个关键的DOM操作方法:

document.createElement(tagName):用于创建一个指定标签名的HTML元素节点。例如,document.createElement(‘li’)会创建一个元素。document.createTextNode(text):用于创建一个包含指定文本内容的文本节点。这比直接设置innerHTML更安全,尤其是在处理用户输入时,可以避免潜在的XSS攻击。element.appendChild(childElement):将一个子节点追加到指定父节点的末尾。这是构建元素层级结构的关键方法。理解父子关系至关重要,一个元素必须先被创建,然后才能被追加到其父元素中。

问题解析:元素追加的常见遗漏

在实现动态列表项时,开发者常犯的一个错误是只将用户输入的文本追加到新创建的

元素中,而忘记将伴随的操作按钮也追加进去。这会导致按钮无法显示在正确的列表项内部。正确的做法是,所有希望出现在同一个内部的子元素(无论是文本节点还是其他HTML元素),都必须通过appendChild()方法逐一追加到该元素上。

实现步骤与代码示例

下面我们将通过一个完整的待办事项列表示例,演示如何正确地将用户输入和删除按钮添加到同一个

元素中。

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

1. HTML结构

首先,我们需要一个基本的HTML骨架,包括一个输入框、一个提交按钮和一个用于显示待办事项的有序列表(

)容器。

            动态待办事项列表            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; }        

我的待办事项

    2. JavaScript逻辑

    接下来,我们将编写JavaScript代码来处理表单提交,动态创建列表项,并将其添加到页面中。

    // script.jsdocument.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. 创建新的列表项 
  1. 元素 const newItem = document.createElement('li'); // 2. 创建一个元素来包裹文本,方便样式控制 const textSpan = document.createElement('span'); textSpan.textContent = itemText; // 使用 textContent 设置文本内容,更安全 // 3. 创建删除按钮
  2. 注意事项与最佳实践

    阻止默认行为:e.preventDefault() 是处理表单提交时非常重要的一步,它能阻止浏览器执行默认的表单提交行为(通常是页面刷新)。清理用户输入:trim() 方法可以移除字符串两端的空白字符,确保即使输入了空格也不会创建空列表项。使用 textContent:当设置元素的纯文本内容时,优先使用 element.textContent 而不是 element.innerHTML。textContent 会自动对特殊字符进行编码,从而防止跨站脚本(XSS)攻击。错误处理:对用户输入进行验证(例如,检查是否为空),并提供相应的反馈,可以提升用户体验。事件委托(高级):对于大量动态生成的元素,为每个元素添加事件监听器可能会影响性能。更高效的做法是使用事件委托,即在父元素上添加一个事件监听器,然后根据事件的目标(e.target)来判断是哪个子元素触发了事件。代码可读:为变量和函数选择有意义的名称,并添加注释,可以大大提高代码的可读性和可维护性。

    总结

    通过本文的详细教程,您应该已经掌握了如何使用JavaScript进行DOM操作,以动态地创建包含用户输入文本和操作按钮的列表项。关键在于理解document.createElement()、document.createTextNode()(或textContent)以及element.appendChild()的用法,并确保所有期望在同一父元素内部的子元素都被正确地追加。遵循这些原则,您将能够构建出功能强大且用户友好的动态Web界面。

    以上就是JavaScript DOM操作:向列表项动态添加用户输入和删除按钮的详细内容,更多请关注创想鸟其它相关文章!

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

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    解决CSS伪元素 :after 悬停或点击无响应的问题:星级评分示例
    上一篇 2025年12月23日 00:34:08
    HTML怎么链接CSS文件_HTML link标签引入外部CSS方法
    下一篇 2025年12月23日 00:34:15

    相关推荐

    • 如何解决Magento2图片加载慢的问题,使用Composer和WebP模块让你的电商网站飞起来

      Composer在线学习地址:学习地址 痛点:电商网站的“甜蜜负担”——图片 在电商领域,高质量的产品图片是吸引顾客、促成转化的关键。然而,这些精美的图片也常常成为网站性能的“甜蜜负担”。当用户访问一个图片众多的商品列表页或详情页时,浏览器需要下载大量的图片资源,这直接导致页面加载时间过长。 我曾在…

      用户投稿 2026年8月25日
      000
    • 第三方SDK(支付、短信、邮件)集成

      集成第三方sdk的步骤包括关注安全性、性能和用户体验。1) 确保api密钥安全存储和传输,使用https保护数据。2) 优化api调用频率,避免性能瓶颈。3) 提供友好的错误处理和反馈机制,提升用户体验。4) 合理控制短信和邮件发送频率和数量,管理成本。 在现代软件开发中,第三方SDK的集成是提升应…

      2026年8月25日
      100
    • 华为Sound X 2024对决Sonos Era 300:智能音箱的空间音频与音质表现,谁家的声音更具包围感?

      华为Sound X 2024主打单体虚拟包围感,依赖帝瓦雷三分频设计与空间感知算法,提供出色声场和低频;Sonos Era 300则通过11单元硬件布局支持杜比全景声,实现真实三维环绕,适合影音发烧友。 华为Sound X 2024和Sonos Era 300都是高端智能音箱,主打沉浸式听感,但在实…

      2026年8月25日
      000
    • 快看漫画网页版在线看:免安装,极速加载

      快看漫画网页版无需下载App即可在线追更,首页按分类推荐热门国漫如《难哄》《好一个乖乖女》,支持搜索直达《天命大反派》等作品最新话,页面适配手机流畅阅读,加载快速清晰度够用,WiFi下体验佳,部分章节有会员抢先提示但更新日后可免费看,偶有推广弹窗可关闭,整体干扰小。 打开快看漫画网页版,不用下载Ap…

      2026年8月25日
      000
    • 压缩文件已损坏如何解决 三大修复方法

      压缩文件已损坏如何解决 三大修复方法压缩文件已损坏如何解决 三大修复方法压缩文件已损坏如何解决 三大修复方法压缩文件已损坏如何解决 三大修复方法

      在日常工作或学习中,我们经常使用 zip、rar、7z 等格式的压缩文件来传输或存储数据。然而,有时会遇到压缩文件损坏的问题,导致无法正常解压或使用其中的内容。今天,我们就来分享几种简单有效的修复方法。 方法一:重新下载或获取文件 如果压缩文件是通过网络下载的(如邮件附件、网盘链接等),文件损坏的常…

      2026年8月25日 用户投稿
      000
    • PHP中复杂异步操作的回调地狱与阻塞困境:GuzzlePromises如何优雅化解

      可以通过一下地址学习composer:学习地址 在现代web应用开发中,php早已不再局限于简单的页面渲染,而是越来越多地承担起与各种外部服务(如微服务、第三方api、数据库等)进行复杂交互的任务。想象一下,你正在开发一个电商网站的商品详情页,需要同时从多个数据源获取信息:商品基本信息、用户评论、库…

      用户投稿 2026年8月25日
      000
    • vivo浏览器官方互联网版登录 vivo浏览器正版官网网址

      vivo浏览器官方登录入口为https://www.vivo.com/,用户可在此下载正版应用并登录vivo账号同步收藏、历史记录等数据,享受集智能搜索、夜间模式、广告拦截、视频小说聚合及流量压缩技术于一体的高效浏览体验。 vivo浏览器官方互联网版登录入口在哪里?这是不少网友都关注的,接下来由PH…

      2026年8月25日
      000
    • kimichat官网入口地址分享-kimichat最新官网登录网址获取

      Kimi官网入口为https://kimi.moonshot.cn/,支持手机号快捷登录,具备实时联网搜索、大文件上传解析、多轮对话管理及Kimi+智能应用等功能,提供跨设备同步与简洁交互体验。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜…

      2026年8月25日
      000
    • C语言实现1到100累加

      C语言实现1到100累加C语言实现1到100累加C语言实现1到100累加C语言实现1到100累加

      本题难度较低,可通过循环结构实现累加计算,重点在于使用三种不同的循环语句完成相同功能。 1、 启动CodeBlocks开发环境,创建一个新项目以进行后续操作。 2、 选择C语言类型,并将项目命名为MaxNum,方便后期维护与识别。 3、 按照提示继续操作,直至项目创建成功。 立即学习“C语言免费学习…

      2026年8月25日 用户投稿
      000
    • VSCode怎么切换解释器_VSCode更换Python/Node等运行环境教程

      答案:在VSCode中切换解释器需通过命令面板或状态栏选择Python解释器,使用nvm或配置settings.json切换Node版本,遇报错可重启、检查扩展与路径,避免自动回切需手动指定并禁提示。 在VSCode中切换解释器,其实就是告诉VSCode用哪个Python环境,或者哪个Node版本来…

      2026年8月25日
      000
    • 电脑USB接口失灵怎么办 一文教你快速修复

      电脑USB接口失灵怎么办 一文教你快速修复电脑USB接口失灵怎么办 一文教你快速修复电脑USB接口失灵怎么办 一文教你快速修复电脑USB接口失灵怎么办 一文教你快速修复

      usb接口作为现代计算机与外部设备通信的重要通道,一旦出现故障,往往会影响日常使用。但大多数情况下,这类问题并非无法解决。本文将由浅入深,系统地为您介绍多种有效的修复方案,帮助您快速恢复usb接口的正常功能。 一、检查物理连接并重启设备 首先应排除最基础的硬件连接问题。重新插拔设备、重启电脑,并尝试…

      2026年8月25日 用户投稿
      000
    • CSRF(跨站请求伪造)防护机制

      有效防护csrf攻击的方法包括:1. 使用csrf token,通过在表单中嵌入随机生成的token并在提交时验证其匹配性,确保请求合法性;2. 同源检测,通过检查请求的origin和referer头,确保请求来自同一个域名;3. 双重cookie验证,将token存储在cookie和请求头中,验证…

      2026年8月25日
      000
    • 不同容量内存组双通道的性能差异:16GBx2 vs. 32GBx2

      答案是32GB×2更适合高负载和长远使用,16GB×2满足日常需求。双通道带宽相近,但64GB容量在视频剪辑、虚拟机、游戏直播等场景优势明显,且避免后期升级困难,适合专业用户和长期平台;若仅办公娱乐或主流游戏,32GB内存已足够,16GB×2更具性价比。 很多人在升级内存时会纠结:是选16GB×2还…

      2026年8月25日
      400
    • 兆易创新Q1营收预计达19.09亿元,同比环比双增长

      ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 4月8日,兆易创新发布公告称,经公司财务部门初步测算,公司预计2025年第一季度实现营业收入19.09亿元左右,同比增长17.32%左右,环比增长11.88%左右。2024年第四季度至2025年…

      2026年8月25日
      100
    • Java中Spring Test的作用 解析上下文

      Java中Spring Test的作用 解析上下文Java中Spring Test的作用 解析上下文Java中Spring Test的作用 解析上下文Java中Spring Test的作用 解析上下文

      spring test的主要作用是提供隔离环境以测试spring组件并解析上下文,其核心价值在于简化测试配置。1. 使用@contextconfiguration注解加载测试上下文,可通过xml配置文件或java配置类定义测试专用bean;2. 通过@runwith(springrunner.cla…

      2026年8月25日 用户投稿
      000
    • 电商平台如何高效集成Heureka“Ověřenozákazníky”服务?Composer与heureka/overeno-zakazniky库的完美实践

      可以通过一下地址学习composer:学习地址 作为一名电商平台的开发者,你是否曾为了提升用户信任度,绞尽脑汁想要接入一些权威的第三方认证服务?在捷克和斯洛伐克市场,heureka的“ověřeno zákazníky”(客户认证)服务无疑是建立消费者信心的金字招牌。它允许真实购买的客户留下评价,这…

      用户投稿 2026年8月25日
      400
    • 抖音小程序如何助力营销?成功案例与玩法解析

      抖音小程序能为品牌带来哪些营销突破? 在流量竞争日益激烈的当下,越来越多品牌将目光投向抖音小程序,试图打通内容与转化之间的最后一环。那么,抖音小程序究竟在营销生态中扮演怎样的角色?它不仅能帮助品牌构建高效的转化路径,还能实现用户资产的长期沉淀。依托于抖音庞大的日活和精准推荐机制,小程序可无缝嵌入短视…

      2026年8月25日
      100
    • Java中synchronized关键字怎么用 详解Java同步锁的4种使用方法

      Java中synchronized关键字怎么用 详解Java同步锁的4种使用方法Java中synchronized关键字怎么用 详解Java同步锁的4种使用方法Java中synchronized关键字怎么用 详解Java同步锁的4种使用方法Java中synchronized关键字怎么用 详解Java同步锁的4种使用方法

      synchronized关键字在java中用于实现线程同步,确保多线程并发访问共享资源时的互斥执行。其主要使用方式包括:1. 同步代码块,通过指定对象作为锁;2. 同步方法,锁为当前对象(this)或类对象(class);3. 静态同步方法,等价于使用类对象作为锁;4. 同步静态变量,通常使用静态对…

      2026年8月25日 用户投稿
      600
    • Java中如何分析线程堆栈 掌握jstack

      Java中如何分析线程堆栈 掌握jstackJava中如何分析线程堆栈 掌握jstackJava中如何分析线程堆栈 掌握jstackJava中如何分析线程堆栈 掌握jstack

      线程堆栈分析是通过查看线程运行状态来定位程序瓶颈或死锁等问题。使用jstack工具可生成jvm线程快照,便于深入分析。获取快照需先找到java进程id,用jps或任务管理器查出,再执行jstack命令并输出到文件。解读堆栈信息时应关注线程状态、名称、id及调用栈,如发现多个线程阻塞在同一锁上,则可能…

      2026年8月25日 用户投稿
      000
    • NovaMorphTo字段新选择:如何解决关联资源创建难题,提升LaravelNova开发效率

      在使用 Laravel Nova 构建后台管理系统时,经常会遇到这样的场景:我们需要在创建某个资源的同时,关联到其他类型的资源。例如,在创建一个文章时,我们可能需要关联到一个新的作者,而不是仅仅从已有的作者列表中选择。默认情况下,Nova 的 MorphTo 字段只能选择已经存在的资源,这在某些情况…

      用户投稿 2026年8月25日
      100

    发表回复

    登录后才能评论
    关注微信