0

0

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

DDD

DDD

发布时间:2025-10-13 11:55:01

|

969人浏览过

|

来源于php中文网

原创

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

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

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

    引言:动态列表的需求

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

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

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

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

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

    在实现动态列表项时,开发者常犯的一个错误是只将用户输入的文本追加到新创建的<li>元素中,而忘记将伴随的操作按钮也追加进去。这会导致按钮无法显示在正确的列表项内部。正确的做法是,所有希望出现在同一个<li>内部的子元素(无论是文本节点还是其他HTML元素),都必须通过appendChild()方法逐一追加到该<li>元素上。

    实现步骤与代码示例

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

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

    VALL-E
    VALL-E

    VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

    下载

    1. HTML结构

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

    <!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> <!-- JavaScript文件将在这里加载 -->
    </body>
    </html>

    2. JavaScript逻辑

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

    // 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)来判断是哪个子元素触发了事件。
    • 代码可读性:为变量和函数选择有意义的名称,并添加注释,可以大大提高代码的可读性和可维护性。

    总结

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

  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

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

    豆包大模型
    豆包大模型

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

    WorkBuddy
    WorkBuddy

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

    腾讯元宝
    腾讯元宝

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

    文心一言
    文心一言

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

    讯飞写作
    讯飞写作

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

    即梦AI
    即梦AI

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

    ChatGPT
    ChatGPT

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

    相关专题

    更多
    js 字符串转数组
    js 字符串转数组

    js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

    761

    2023.08.03

    js截取字符串的方法
    js截取字符串的方法

    js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

    221

    2023.09.04

    java基础知识汇总
    java基础知识汇总

    java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

    1570

    2023.10.24

    字符串介绍
    字符串介绍

    字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

    651

    2023.11.24

    java读取文件转成字符串的方法
    java读取文件转成字符串的方法

    Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

    1249

    2024.03.22

    php中定义字符串的方式
    php中定义字符串的方式

    php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

    1206

    2024.04.29

    go语言字符串相关教程
    go语言字符串相关教程

    本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

    194

    2025.07.29

    c++字符串相关教程
    c++字符串相关教程

    本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

    131

    2025.08.07

    chatgpt使用指南
    chatgpt使用指南

    本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

    0

    2026.03.16

    热门下载

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

    精品课程

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

    共58课时 | 6.2万人学习

    TypeScript 教程
    TypeScript 教程

    共19课时 | 3.5万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 3.7万人学习

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

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