0

0

在同一列表项中动态添加文本与按钮:JavaScript DOM操作指南

花韻仙語

花韻仙語

发布时间:2025-10-12 11:58:40

|

432人浏览过

|

来源于php中文网

原创

在同一列表项中动态添加文本与按钮:javascript dom操作指南

本教程详细阐述了如何使用JavaScript动态地在同一个`

  • `元素中添加用户输入的文本内容和一个操作按钮(例如“删除”按钮)。通过`document.createElement()`创建元素,并利用`appendChild()`方法多次将不同类型的子元素(文本节点和按钮元素)添加到同一个父元素中,从而实现功能完整的动态列表项。教程提供了清晰的代码示例和实践建议,帮助开发者构建交互式Web应用。

    在Web开发中,动态生成用户界面元素是常见的需求,尤其是在构建任务列表、评论区等交互式应用时。一个典型的场景是,用户输入一段文本,系统将其作为一个列表项显示,并同时提供一个操作按钮(如“删除”),允许用户对该列表项进行后续操作。本文将详细指导您如何利用JavaScript的DOM操作来实现这一功能,确保用户输入和操作按钮都能正确地添加到同一个列表项中。

    核心概念:appendChild()方法的灵活应用

    appendChild()方法是DOM操作中用于将一个节点添加到另一个节点的子节点列表末尾的关键方法。它的一个重要特性是,同一个父元素可以多次调用appendChild()来添加不同的子元素。这意味着,您不仅可以将文本节点添加到<li>中,还可以将一个按钮元素添加到同一个<li>中。

    示例场景:构建一个待办事项列表

    我们将通过一个简单的待办事项(Todo List)应用来演示这个过程。用户在一个输入框中键入待办事项,按下Enter键后,该事项会作为一个新的列表项出现在列表中,并且每个列表项旁边都会有一个“删除”按钮。

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

    HTML 结构

    首先,我们需要一个基本的HTML结构,包括一个标题、一个用于用户输入的表单以及一个显示待办事项的有序列表。

    Napkin AI
    Napkin AI

    Napkin AI 可以将您的文本转换为图表、流程图、信息图、思维导图视觉效果,以便快速有效地分享您的想法。

    下载
    <h1 class="title">todos</h1>
    <form id="todoForm">
        <button id="scrolldown-menu-toggle">˅</button>
        <input type="text" id="todoInput" placeholder="填写您的计划">
        <button type="submit" style="display: none;">添加</button> <!-- 隐藏的提交按钮,或者通过JS监听Enter键 -->
    </form>
    
    <ol id="todoList"></ol>

    在这个结构中:

    • #todoForm 是包含输入框的表单。
    • #todoInput 是用户输入待办事项的文本框。
    • #todoList 是我们将动态添加<li>元素的有序列表。

    JavaScript 实现:动态创建与添加元素

    接下来是JavaScript部分,它负责处理用户输入、创建新的列表项、添加文本和按钮,并将其呈现在页面上。

    function todoListHandler() {
        // 1. 获取用户输入
        const todoInput = document.getElementById('todoInput');
        const itemText = (todoInput as HTMLInputElement).value.trim(); // 获取输入值并去除首尾空格
    
        // 如果输入为空,则不创建新的列表项
        if (itemText === '') {
            alert('待办事项不能为空!');
            return;
        }
    
        // 2. 创建新的列表项 (<li>)
        const newItem = document.createElement('li');
    
        // 3. 创建文本节点,包含用户输入
        const textNode = document.createTextNode(itemText);
    
        // 4. 创建删除按钮 (<button>)
        const deleteButton = document.createElement("button");
        deleteButton.innerHTML = '删除';
        deleteButton.className = 'delete-btn'; // 可以添加CSS类以便样式化
    
        // 5. 将文本节点和按钮都添加到新的列表项 (<li>) 中
        newItem.appendChild(textNode);
        newItem.appendChild(deleteButton); // 关键步骤:将按钮也添加到<li>中
    
        // 6. 将完整的列表项 (<li>) 添加到待办事项列表 (<ol>) 中
        const todoListContainer = document.getElementById('todoList');
        todoListContainer.appendChild(newItem);
    
        // 7. 清空输入框,方便用户输入下一个事项
        (todoInput as HTMLInputElement).value = '';
    
        // 8. 为删除按钮添加事件监听器 (可选,更推荐事件委托)
        deleteButton.addEventListener('click', () => {
            todoListContainer.removeChild(newItem);
        });
    }
    
    // 监听表单提交事件,阻止默认行为并调用todoListHandler
    const form = document.getElementById('todoForm');
    form.addEventListener("submit", (e) => {
        e.preventDefault(); // 阻止表单的默认提交行为(页面刷新)
        todoListHandler();
    });

    代码解析:

    1. 获取用户输入: document.getElementById('todoInput') 获取输入框元素,然后通过.value获取其内容。.trim()用于移除输入内容两端的空白字符,提高健壮性。
    2. 创建<li>元素: document.createElement('li') 创建一个新的列表项元素。
    3. 创建文本节点: document.createTextNode(itemText) 创建一个包含用户输入文本的文本节点。
    4. 创建按钮元素: document.createElement("button") 创建一个按钮元素,并通过innerHTML设置其显示文本为“删除”。
    5. 核心步骤:添加子元素到<li>:
      • newItem.appendChild(textNode) 将用户输入的文本添加到<li>中。
      • newItem.appendChild(deleteButton) 这一行是解决问题的关键,它将我们创建的“删除”按钮也添加到了同一个<li>中。现在,一个<li>元素同时包含了文本内容和按钮。
    6. 将<li>添加到<ol>: document.getElementById('todoList').appendChild(newItem) 将包含文本和按钮的完整<li>添加到页面上显示的有序列表#todoList中。
    7. 清空输入框: 每次添加后,清空输入框,提升用户体验。
    8. 删除按钮事件: 为新创建的删除按钮添加一个点击事件监听器,当点击时,从父容器中移除对应的<li>。

    注意事项与进阶

    • 事件委托(Event Delegation): 在上述示例中,我们为每个新创建的删除按钮都添加了一个独立的事件监听器。当列表项非常多时,这可能会影响性能。更优的实践是使用事件委托,即在父元素(如#todoList)上添加一个监听器,通过判断事件源(e.target)来处理子元素的点击事件。
      // 在todoListHandler函数外,或者在页面加载时执行
      const todoListContainer = document.getElementById('todoList');
      todoListContainer.addEventListener('click', (e) => {
          if ((e.target as HTMLElement).classList.contains('delete-btn')) {
              // 找到最近的<li>父元素并移除
              const listItemToRemove = (e.target as HTMLElement).closest('li');
              if (listItemToRemove) {
                  todoListContainer.removeChild(listItemToRemove);
              }
          }
      });
      // todoListHandler函数中就不需要为每个deleteButton添加事件监听器了
    • 输入验证: 在实际应用中,您可能需要对用户输入进行更严格的验证,例如限制长度、检查特殊字符等。
    • 持久化数据: 当前的待办事项在页面刷新后会丢失。要实现数据持久化,可以使用localStorage、sessionStorage或后端数据库。
    • 样式化: 通过CSS为新创建的<li>和button添加样式,使其更符合应用的设计。

    总结

    通过本教程,您应该已经掌握了如何利用JavaScript的DOM操作,在同一个父元素(如<li>)中动态地添加多个不同类型的子元素(如文本节点和按钮)。关键在于理解appendChild()方法可以被多次调用,并且可以接受不同类型的节点作为参数。结合事件监听和事件委托等技术,您可以构建出功能丰富且用户体验良好的动态Web界面。

  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

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

    豆包大模型
    豆包大模型

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

    WorkBuddy
    WorkBuddy

    腾讯云推出的AI原生桌面智能体工作台

    腾讯元宝
    腾讯元宝

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

    文心一言
    文心一言

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

    讯飞写作
    讯飞写作

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

    即梦AI
    即梦AI

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

    ChatGPT
    ChatGPT

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

    相关专题

    更多
    DOM是什么意思
    DOM是什么意思

    dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

    4349

    2024.08.14

    DOM是什么意思
    DOM是什么意思

    dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

    4349

    2024.08.14

    li是什么元素
    li是什么元素

    li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

    437

    2023.08.03

    数据库三范式
    数据库三范式

    数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

    389

    2023.06.29

    如何删除数据库
    如何删除数据库

    删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

    2112

    2023.08.14

    vb怎么连接数据库
    vb怎么连接数据库

    在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

    357

    2023.08.31

    MySQL恢复数据库
    MySQL恢复数据库

    MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

    259

    2023.09.05

    vb中怎么连接access数据库
    vb中怎么连接access数据库

    vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

    329

    2023.10.09

    TypeScript类型系统进阶与大型前端项目实践
    TypeScript类型系统进阶与大型前端项目实践

    本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

    26

    2026.03.13

    热门下载

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

    精品课程

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

    共14课时 | 0.9万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 3.6万人学习

    CSS教程
    CSS教程

    共754课时 | 43.1万人学习

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

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