Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
JavaScript DOM操作:动态创建包含文本和交互按钮的列表项_创想鸟

JavaScript DOM操作:动态创建包含文本和交互按钮的列表项

JavaScript DOM操作:动态创建包含文本和交互按钮的列表项

本文将指导如何在javascript中通过dom操作,动态创建包含用户输入文本和删除按钮的列表项(`

`),并将其添加到html页面。通过详细的代码示例,您将学会如何有效地将多个元素(文本节点和按钮元素)添加到同一个父元素中,从而实现交互式待办事项列表等功能。

引言:动态构建交互式列表项

在现代Web开发中,通过JavaScript动态操作文档对象模型(DOM)是实现丰富用户界面的核心技术之一。无论是构建待办事项列表、评论区还是其他需要用户交互的动态内容,我们经常需要创建新的HTML元素,并向其中添加文本、按钮或其他组件。一个常见的需求是,当用户输入内容后,不仅要显示其文本,还要提供一个与之关联的操作按钮(例如“删除”),并将它们同时包含在同一个父元素中,如一个列表项(

)。

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

在深入实现之前,我们先回顾几个关键的DOM操作方法:

document.createElement(tagName):用于创建一个指定标签名称的HTML元素节点。例如,document.createElement(‘li’) 将创建一个 元素。document.createTextNode(data):用于创建一个文本节点。例如,document.createTextNode(‘我的待办事项’) 将创建一个包含“我的待办事项”文本的节点。parentNode.appendChild(childNode):将一个节点作为最后一个子节点添加到父节点。这个方法非常灵活,可以多次调用,将多个子节点依次追加到同一个父节点中。

理解 appendChild 可以多次调用的特性是解决本文问题的关键。

问题场景:如何同时添加文本和按钮?

假设我们正在开发一个简单的待办事项应用,用户可以在输入框中输入计划,然后按回车键或提交表单后,该计划会作为列表项显示。每个列表项不仅要显示用户输入的内容,还应带有一个“删除”按钮。

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

以下是初始的HTML结构:

todos

    以及一个尝试实现此功能的JavaScript片段:

    function todoList(){    const item: string = (document.getElementById('todoInput')).value;    const text = document.createTextNode(item);    const newItem = document.createElement('li');    const button: any = document.createElement("button");    button.innerHTML = 'Delete';    newItem.appendChild(text); // 这里只追加了文本节点    // @ts-ignore}const form = (document.getElementById('todoForm'));form.addEventListener("submit", (e) => {    e.preventDefault();    // todoList(); // 实际调用 todoList 函数});

    在上述JavaScript代码中,我们创建了

    元素 (newItem),创建了文本节点 (text),并将其追加到了 newItem。我们也创建了 button 元素,并设置了其文本。然而,button 元素并没有被追加到 newItem 中。因此,当 todoList 函数执行后,页面上只会显示用户输入的文本,而不会有“删除”按钮。

    解决方案:追加多个子元素到同一父元素

    解决这个问题的方法非常直接:只需要在 newItem.appendChild(text) 之后,再调用一次 newItem.appendChild(button) 即可。

    function todoList(){   const item: string = (document.getElementById('todoInput')).value;   const text = document.createTextNode(item);   const newItem = document.createElement('li');   const button: any = document.createElement("button");   button.innerHTML = 'Delete';   newItem.appendChild(text); // 追加文本节点   newItem.appendChild(button); // <--- 关键:追加按钮元素到同一个 li   // @ts-ignore}

    通过添加 newItem.appendChild(button) 这一行,我们确保了 button 元素也被正确地添加到了

    元素内部,使其成为 的一个子元素。

    构建完整且功能完善的待办事项列表

    为了提供一个完整的、可运行的示例,我们不仅要解决按钮的追加问题,还要完善待办事项列表的整体逻辑,包括将

    添加到 或 容器中,以及为“删除”按钮添加实际的删除功能。

    HTML 结构

                待办事项列表            body { font-family: Arial, sans-serif; margin: 20px; }        #todoForm { display: flex; margin-bottom: 20px; }        #todoInput { flex-grow: 1; padding: 8px; border: 1px solid #ccc; border-radius: 4px; }        #todoForm button { margin-left: 10px; padding: 8px 15px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; }        #todoForm button:hover { background-color: #0056b3; }        #todoList { list-style: none; padding: 0; }        #todoList li { display: flex; justify-content: space-between; align-items: center; padding: 10px; border: 1px solid #eee; margin-bottom: 8px; border-radius: 4px; background-color: #f9f9f9; }        #todoList li button { background-color: #dc3545; color: white; border: none; padding: 5px 10px; border-radius: 3px; cursor: pointer; }        #todoList li button:hover { background-color: #c82333; }        

    我的待办事项

      JavaScript 实现 (app.js)

      // 获取DOM元素const todoInput = document.getElementById('todoInput');const todoForm = document.getElementById('todoForm');const todoListContainer = document.getElementById('todoList');/** * 添加新的待办事项到列表 */function addTodoItem() {    const itemText = todoInput.value.trim(); // 获取输入值并去除首尾空格    // 检查输入是否为空    if (itemText === "") {        alert("待办事项不能为空!");        return;    }    // 1. 创建新的列表项 
    1. const newItem = document.createElement('li'); // 2. 创建文本节点,包含用户输入的内容 const textNode = document.createTextNode(itemText); newItem.appendChild(textNode); // 将文本节点追加到
    2. // 3. 创建删除按钮 const deleteButton = document.createElement("button"); deleteButton.innerHTML = '删除'; // 设置按钮文本 // 为删除按钮添加点击事件监听器 deleteButton.onclick = function() { newItem.remove(); // 当按钮被点击时,移除整个
    3. 元素 }; newItem.appendChild(deleteButton); // 将删除按钮追加到同一个
    4. // 4. 将完整的
    5. 追加到
        容器中 todoListContainer.appendChild(newItem); // 5. 清空输入框,以便用户输入下一个事项 todoInput.value = ''; todoInput.focus(); // 重新聚焦输入框}// 监听表单的提交事件todoForm.addEventListener("submit", (e) => { e.preventDefault(); // 阻止表单的默认提交行为(页面刷新) addTodoItem(); // 调用添加待办事项的函数});
    6. 在这个完整的示例中,addTodoItem 函数负责创建

      、文本节点和“删除”按钮,并将文本节点和按钮都追加到 中。然后,这个完整的 被追加到 容器中。同时,我们为“删除”按钮添加了 onclick 事件,使其能够移除其父级 元素,实现了待办事项的删除功能。表单的 submit 事件监听器则确保在用户提交表单时调用 addTodoItem 函数,并阻止页面刷新。

      注意事项与最佳实践

      输入验证:在添加内容前,检查用户输入是否为空或仅包含空格,可以提升用户体验。清空输入框:成功添加内容后清空输入框,并可选地重新聚焦,方便用户继续输入。事件处理:对于动态创建的元素(如本例中的“删除”按钮),可以直接在创建时绑定事件监听器。对于大量动态生成的元素,考虑使用事件委托(Event Delegation)是一种更高效的模式。这意味着将事件监听器绑定到它们的共同父元素上,然后通过事件冒泡和 event.target 来判断是哪个子元素触发了事件。TypeScript 类型断言:在TypeScript环境中,当通过 document.getElementById() 获取元素时,通常需要使用类型断言(如 或 )来明确元素的具体类型,以便访问其特有的属性和方法(如 .value 或 .addEventListener)。性能考量:虽然本例中直接操作DOM是可行的,但在处理大量数据或频繁DOM操作时,考虑使用文档片段(DocumentFragment)来批量添加元素,减少页面重绘,或使用现代前端框架(如React, Vue, Angular)来优化DOM更新。

      总结

      通过本教程,我们学习了如何在JavaScript中利用 document.createElement()、document.createTextNode() 和 element.appendChild() 方法动态创建HTML元素。关键在于理解 appendChild() 可以多次用于同一个父元素,从而允许我们将多个子元素(如文本节点和按钮元素)有效地组合到单个父元素(如

      )中。结合事件监听器,我们可以构建出功能强大且交互性强的Web界面,如本例中的待办事项列表。掌握这些基本的DOM操作是进行前端开发的基础。

      以上就是JavaScript DOM操作:动态创建包含文本和交互按钮的列表项的详细内容,更多请关注创想鸟其它相关文章!

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

      赞 (0)
      打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
      修复CSS伪元素:after不响应hover或点击事件的问题
      上一篇 2025年12月23日 00:16:21
      如何使用 jQuery 在输入框满足 10 位数字时启用按钮
      下一篇 2025年12月23日 00:16:40

      相关推荐

      • 手机淘宝店如何经营分店?手机淘宝如何做分销商

        手机淘宝店如何经营分店?手机淘宝如何做分销商手机淘宝店如何经营分店?手机淘宝如何做分销商手机淘宝店如何经营分店?手机淘宝如何做分销商手机淘宝店如何经营分店?手机淘宝如何做分销商

        可通过开设分店或发展分销模式扩展手机淘宝业务。1、用不同手机号注册新账号并完成实名认证,开通店铺后设定独立品牌与类目,通过千牛工作台实现多店统一管理;2、企业用户可申请多个子店铺构建品牌矩阵,配置独立运营权限并对接统一ERP系统,实现数据同步与流量互导;3、入驻阿里妈妈成为分销商,完成身份认证后选择…

        2026年9月30日 • 用户投稿
        000
      • 注册香港AppleID的步骤及注意事项(畅享香港AppleStore的独特优势)

        注册香港AppleID的步骤及注意事项(畅享香港AppleStore的独特优势)注册香港AppleID的步骤及注意事项(畅享香港AppleStore的独特优势)注册香港AppleID的步骤及注意事项(畅享香港AppleStore的独特优势)注册香港AppleID的步骤及注意事项(畅享香港AppleStore的独特优势)

        在全球范围内,apple公司的产品和服务一直备受用户喜爱。注册一个香港appleid将带给用户更多的便利和特权,让我们一起来了解一下注册香港appleid的步骤以及需要注意的事项。 如何注册香港AppleID 如何在苹果设备上使用香港Apple ID许多苹果设备的功能和应用程序都需要 Apple I…

        2026年9月30日 • 用户投稿
        000
      • 手机淘宝花呗在哪里找出来?手机淘宝的花呗在哪里

        手机淘宝花呗在哪里找出来?手机淘宝的花呗在哪里手机淘宝花呗在哪里找出来?手机淘宝的花呗在哪里手机淘宝花呗在哪里找出来?手机淘宝的花呗在哪里手机淘宝花呗在哪里找出来?手机淘宝的花呗在哪里

        首先检查“我的淘宝”页面是否显示花呗入口,若无则通过淘宝搜索“花呗”进入服务卡片,或从支付宝花呗页面反向引导恢复入口,同时确保淘宝APP已更新至最新版本并手动启用花呗组件。 如果您在使用手机淘宝时发现无法找到花呗入口,可能是由于应用界面更新或功能模块调整导致。以下是恢复和查找花呗入口的详细步骤: 本…

        2026年9月30日 • 用户投稿
        000
      • Java递归实现最长回文子串的查找与修正

        本文探讨了使用递归方法查找字符串中最长回文子串的常见挑战与陷阱。通过分析一个常见的错误递归实现,文章指出了判断子串是否构成完整回文的关键逻辑缺陷,并提供了一个经过修正的递归算法,详细解释了其工作原理,旨在帮助读者正确理解和实现递归回文检测。 递归查找最长回文子串:问题背景 在计算机科学中,回文是一个…

        2026年9月30日
        000
      • 抖音号被无限期禁言怎么办?抖音号被永久禁言怎么解封

        抖音号被无限期禁言怎么办?抖音号被永久禁言怎么解封抖音号被无限期禁言怎么办?抖音号被永久禁言怎么解封抖音号被无限期禁言怎么办?抖音号被永久禁言怎么解封抖音号被无限期禁言怎么办?抖音号被永久禁言怎么解封

        在当今这个短视频盛行的时代,抖音已经成为许多人生活中不可或缺的一部分。有时候我们的抖音号可能会因为各种原因被禁言,这让很多小伙伴感到困惑和无助。别担心,今天就来和大家聊聊抖音号被无限期禁言怎么办,教你轻松应对解决之道。 一、了解禁言原因 我们要明白抖音号被禁言的原因。以下是一些常见的禁言原因: 禁言…

        2026年9月30日 • 用户投稿
        100
      • 泰国游焦虑终结者:天际通+花瓣地图 纵享丝滑轻松打

        泰国游焦虑终结者:天际通+花瓣地图  纵享丝滑轻松打泰国游焦虑终结者:天际通+花瓣地图  纵享丝滑轻松打泰国游焦虑终结者:天际通+花瓣地图  纵享丝滑轻松打泰国游焦虑终结者:天际通+花瓣地图  纵享丝滑轻松打

        中秋国庆双节将至,想必不少人正计划着来一场说走就走的远行。刚好我最近工作节奏放缓,便决定趁此机会错峰出行,提前为大家探探路!原本还担心曼谷会人山人海、寸步难行,索性避开了热门景点,转而选择了清迈的静谧村落、甲米的隐秘海滩,开启一段惬意的“反向旅行”。但新的烦恼也随之而来——到了国外没网络怎么联系家人…

        2026年9月30日 • 用户投稿
        000
      • ColorOS 16流畅技术前瞻,技术架构升级挑战流畅三大极限

        ColorOS 16流畅技术前瞻,技术架构升级挑战流畅三大极限ColorOS 16流畅技术前瞻,技术架构升级挑战流畅三大极限ColorOS 16流畅技术前瞻,技术架构升级挑战流畅三大极限ColorOS 16流畅技术前瞻,技术架构升级挑战流畅三大极限

        9月22日,oppo在深圳举行了一场关于系统流畅性的技术沟通会,提前揭晓了即将上线的coloros 16系统。此次发布的全新coloros 16在底层架构上实现全面革新,依托三大核心技术——全新极光引擎、全新潮汐引擎与全新繁星编译器,推动手机系统流畅体验迈入全新阶段,标志着coloros对极致顺滑操…

        2026年9月30日 • 用户投稿
        100
      • 火狐浏览器为什么不能安装Chrome的扩展_火狐与Chrome扩展不兼容原因解析

        火狐浏览器为什么不能安装Chrome的扩展_火狐与Chrome扩展不兼容原因解析火狐浏览器为什么不能安装Chrome的扩展_火狐与Chrome扩展不兼容原因解析火狐浏览器为什么不能安装Chrome的扩展_火狐与Chrome扩展不兼容原因解析火狐浏览器为什么不能安装Chrome的扩展_火狐与Chrome扩展不兼容原因解析

        Firefox不兼容Chrome扩展因技术架构差异,可优先查找官方Firefox版本或从AMO官网下载替代扩展;若具备开发能力,可手动修改manifest.json并临时加载,但存在失败风险。 如果您尝试在火狐浏览器中安装一个为Chrome设计的扩展程序,但安装失败或无法使用,则可能是由于两者基于不…

        2026年9月30日 • 用户投稿
        200
      • 手机淘宝怎么搜索商家?手机淘宝怎么搜索商家地址

        手机淘宝怎么搜索商家?手机淘宝怎么搜索商家地址手机淘宝怎么搜索商家?手机淘宝怎么搜索商家地址手机淘宝怎么搜索商家?手机淘宝怎么搜索商家地址手机淘宝怎么搜索商家?手机淘宝怎么搜索商家地址

        1、可通过搜索框切换至店铺类型输入名称查找商家;2、使用商家旺旺账号可精准定位唯一店铺;3、从订单记录中搜索编号或商品可找回历史合作商家;4、在店铺主页查看营业执照或资质证书获取注册地址信息。 如果您想在手机淘宝上找到特定的商家,但不确定如何操作,可以通过多种方式实现精准查找。无论是通过店铺名称、商…

        2026年9月30日 • 用户投稿
        100
      • 怎么用豆包AI帮我生成HTTP客户端代码 HTTP客户端代码的AI生成指南

        怎么用豆包AI帮我生成HTTP客户端代码 HTTP客户端代码的AI生成指南怎么用豆包AI帮我生成HTTP客户端代码 HTTP客户端代码的AI生成指南怎么用豆包AI帮我生成HTTP客户端代码 HTTP客户端代码的AI生成指南怎么用豆包AI帮我生成HTTP客户端代码 HTTP客户端代码的AI生成指南

        使用豆包ai生成http客户端代码的关键在于提供清晰具体的指令。1. 明确请求方式和目标url,例如指定get或post请求及对应地址;2. 提供查询参数、请求头及认证信息,如token或headers;3. 指定编程语言及框架,如python的requests、node.js的axios等;4. …

        2026年9月30日 • 用户投稿
        100
      • 物种卡抽取技巧

        物种卡抽取技巧物种卡抽取技巧物种卡抽取技巧物种卡抽取技巧

        在app中按照以下步骤即可参与物种卡抽取,详细操作请参考页面内的提示说明。 1、 打开支付宝首页,找到对应的功能入口并点击 2、 进入蚂蚁森林功能区,随后跳转至活动页面 造好物 一站式AI造物设计平台 70 查看详情 3、 完成点击操作,即有机会获得物种卡 以上就是物种卡抽取技巧的详细内容,更多请关…

        2026年9月30日 • 用户投稿
        000
      • 4000+ 单核狂飙!天玑9500直撵 A19 Pro 多核 11217 直接赢

        4000+ 单核狂飙!天玑9500直撵 A19 Pro  多核 11217 直接赢4000+ 单核狂飙!天玑9500直撵 A19 Pro  多核 11217 直接赢4000+ 单核狂飙!天玑9500直撵 A19 Pro  多核 11217 直接赢4000+ 单核狂飙!天玑9500直撵 A19 Pro  多核 11217 直接赢

        最近,联发科正式推出了其最新旗舰芯片——天玑9500。如果说去年的天玑系列让大家开始“另眼相看”,那今年的天玑9500则是直接让目光定格:单核性能突破4000+大关,强势挺进顶级性能行列,正面叫板苹果a19 pro;而在多核表现上更是惊艳,跑出11217的高分,轻松将a19 pro甩在身后。性能之争…

        2026年9月30日 • 用户投稿
        100
      • iCloud官网怎么清理存储空间_iCloud空间清理优化技巧

        iCloud官网怎么清理存储空间_iCloud空间清理优化技巧iCloud官网怎么清理存储空间_iCloud空间清理优化技巧iCloud官网怎么清理存储空间_iCloud空间清理优化技巧iCloud官网怎么清理存储空间_iCloud空间清理优化技巧

        首先查看iCloud存储占用情况,重点清理照片、旧设备备份、iCloud云盘冗余文件及邮件附件,通过删除无用数据和优化设置释放空间。 如果您发现iCloud存储空间已接近上限,导致照片无法同步、设备无法备份或新数据无法上传,则需要立即清理和优化iCloud存储。以下是多种有效的方法,帮助您快速释放i…

        2026年9月30日 • 用户投稿
        200
      • win11怎么设置锁屏壁纸自动更换_win11锁屏壁纸自动更换设置教程

        首先启用幻灯片放映模式并选择图片文件夹,其次可开启Windows聚焦功能获取自动更新壁纸,若仍不更换则通过删除缓存与重置组件修复内容交付服务。 如果您希望Windows 11的锁屏壁纸能够自动更换,但发现系统未按预期轮换图片,可能是由于设置未正确配置或功能被关闭。以下是实现锁屏壁纸自动更换的详细操作…

        2026年9月30日
        200
      • 猫眼退票流程复杂吗_猫眼电影票便捷退票流程指南

        猫眼退票流程复杂吗_猫眼电影票便捷退票流程指南猫眼退票流程复杂吗_猫眼电影票便捷退票流程指南猫眼退票流程复杂吗_猫眼电影票便捷退票流程指南猫眼退票流程复杂吗_猫眼电影票便捷退票流程指南

        猫眼平台支持电影票退票,需在电影开场前规定时间内且未取票时申请。用户可通过猫眼App或微信小程序进入订单详情页,点击“申请退票”并按提示操作。退票手续费根据时间递增:48小时内10%、24小时内20%、2小时内高达50%,若实付金额低于手续费则不可退。退款原路返回,最长7个工作日内到账。特殊场次及已…

        2026年9月30日 • 用户投稿
        100
      • 小米汽车突然自己开走?官方回应:排除质量问题

        小米汽车突然自己开走?官方回应:排除质量问题小米汽车突然自己开走?官方回应:排除质量问题小米汽车突然自己开走?官方回应:排除质量问题小米汽车突然自己开走?官方回应:排除质量问题

        9 月 30 日,山东威海一段监控视频让小米汽车再次成为舆论焦点。 据浪潮新闻报道,一位车主发布视频称,其停放在店门口的小米汽车在无人操作的情况下突然自行启动并驶离原位,全程未触碰手机钥匙,车内也无驾驶人员。 事件发生后,“小米汽车突然自己开走”迅速登上热搜榜单。 截至发稿,该话题阅读量已超 960…

        2026年9月30日 • 用户投稿
        400
      • Java自定义类方法链式调用实践:实现对象状态修改

        本文详细讲解了如何在Java自定义类中实现方法链式调用,以便在创建对象后立即对其状态进行修改。核心在于使修改对象状态的方法返回当前对象实例(this),从而允许连续调用多个方法,简化代码结构并提高可读性。文章通过具体示例代码,演示了如何构建支持链式调用的类方法,并探讨了其背后的原理和应用场景。 在J…

        2026年9月30日
        700
      • VS Code终端配置:环境变量与信号处理技术指南

        合理配置环境变量和理解信号机制可提升VS Code终端使用效率。1. 项目级变量通过.env文件或launch.json中设置env字段实现,Node.js需手动加载;2. 用户/系统级变量需在操作系统中修改并重启VS Code生效;3. 终端启动时应确保正确shell及配置文件加载;4. Ctrl…

        2026年9月30日
        000
      • 如何使用Java的Optional防止空指针异常

        合理使用Optional可避免空指针异常,提升代码安全性和可读性。1. 用Optional.ofNullable封装可能为null的对象,如用户为空时姓名设为“未知用户”;2. 通过orElse提供默认值,高开销场景优先使用延迟加载的orElseGet;3. 利用map链式转换嵌套属性,自动规避中间…

        2026年9月30日
        100
      • sublime怎样进行代码注释美化 sublime注释格式化的插件技巧

        sublime怎样进行代码注释美化 sublime注释格式化的插件技巧sublime怎样进行代码注释美化 sublime注释格式化的插件技巧sublime怎样进行代码注释美化 sublime注释格式化的插件技巧sublime怎样进行代码注释美化 sublime注释格式化的插件技巧

        sublime text本身注释美化能力有限,主要依赖插件实现高级格式化;2. docblockr是核心插件,能智能生成结构化注释块,支持参数、返回值识别与文本对齐;3. 代码格式化工具如jsprettier和sublimeblack在统一代码风格的同时也规范注释缩进与换行,提升整体协调性;4. 注…

        2026年9月30日 • 用户投稿
        100

      发表回复

      登录后才能评论
      关注微信