如何在鼠标悬停时动态添加并移除列表项

云辰大大_1792

云辰大大_1792

2026-07-17

196人浏览

原创

如何在鼠标悬停时动态添加并移除列表项

本文详解如何通过 JavaScript 在 div 元素悬停时动态生成 列表项(基于数组数据),并在移出时完整清理 DOM,避免重复添加、索引越界和元素残留等常见错误。

本文详解如何通过 javascript 在 div 元素悬停时动态生成 `

  • ` 列表项(基于数组数据),并在移出时完整清理 dom,避免重复添加、索引越界和元素残留等常见错误。

    在实现“悬停显示列表、离开即隐藏”的交互效果时,一个典型误区是将事件监听逻辑与 DOM 创建/销毁逻辑耦合不当,导致无限追加、undefined 文本、拼写错误及清理不彻底等问题。以下是经过验证的专业解决方案。

    左手医生开放平台
    左手医生开放平台

    左手医生开放平台是一款面向智慧医疗服务建设的 AI 医疗开放平台。

    下载

    ✅ 正确实现步骤

    1. 预创建
        容器
      :在事件外声明 topicUl,避免每次 mouseover 重复创建新元素;
    2. 修正循环边界:使用 i
    3. 修复变量名拼写:原代码中 topiclUl(多了一个 l)应为 topicUl;
    4. 安全清空与移除:mouseout 中先清空
        所有子节点(用 while (topicUl.firstChild) topicUl.removeChild(...)),再从父容器中移除
          本身——确保 DOM 干净,且不依赖选择器查找(避免遗漏或误删)。

    ✅ 完整可运行代码

    
    <meta charset="utf-8"><div id="topics-div">Topics</div>
    
      <script>
        const stringsArray = [
          "Topic 1",
          "Topic 2",
          "Topic 3",
          "Topic 4",
          "Topic 5"
        ];
    
        const topicsDiv = document.getElementById("topics-div");
        const topicUl = document.createElement("ul");
    
        topicsDiv.addEventListener("mouseenter", () => {
          // 清空 ul(防重复悬停触发多次添加)
          while (topicUl.firstChild) {
            topicUl.removeChild(topicUl.firstChild);
          }
          // 添加 li 项
          stringsArray.forEach(text => {
            const li = document.createElement("li");
            li.textContent = text;
            topicUl.appendChild(li);
          });
          // 插入 ul 到 div(仅当未存在时插入,但此处由 mouseout 移除,故每次 safe append)
          if (!topicsDiv.contains(topicUl)) {
            topicsDiv.appendChild(topicUl);
          }
        });
    
        topicsDiv.addEventListener("mouseleave", () => {
          // 先清空 ul 内容(可选,因后续会移除 ul)
          while (topicUl.firstChild) {
            topicUl.removeChild(topicUl.firstChild);
          }
          // 移除整个 ul
          if (topicsDiv.contains(topicUl)) {
            topicsDiv.removeChild(topicUl);
          }
        });
      </script>

    ⚠️ 关键注意事项

    • 推荐使用 addEventListener 替代 onmouseover/onmouseout:更易维护、支持多监听器、语义更清晰(mouseenter/mouseleave 比 mouseover/mouseout 更精准,不触发子元素冒泡干扰);
    • 避免全局变量污染:用 const 声明不可变引用,提升可读性与安全性;
    • 防御性 DOM 操作:添加前检查 !topicsDiv.contains(topicUl),移除前检查 topicsDiv.contains(topicUl),防止报错;
    • 性能考虑:若列表项极多(如 >1000 条),建议使用 DocumentFragment 批量插入,减少重排重绘。

    通过以上结构化处理,即可稳定实现「悬停即显、离即隐」的动态列表交互,兼顾健壮性、可维护性与现代 Web 最佳实践。

  • PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    javascript 事件监听

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    LLVM自定义Pass怎么写
    LLVM自定义Pass怎么写

    本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

    2026.09.30

    80

    10

    LLVM RISC-V参数配置教程
    LLVM RISC-V参数配置教程

    本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

    2026.09.30

    80

    14

    LLVM IR中间表示入门指南
    LLVM IR中间表示入门指南

    本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

    2026.09.30

    40

    12

    PDF转图片方法
    PDF转图片方法

    需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

    2026.09.30

    40

    26

    PixTV AI视频生成与无限画布创作
    PixTV AI视频生成与无限画布创作

    PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

    2026.09.29

    60

    15

    Buffalo框架数据库开发全教程
    Buffalo框架数据库开发全教程

    本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

    2026.09.23

    280

    15

    Buffalo框架路由与请求处理实操指南
    Buffalo框架路由与请求处理实操指南

    本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

    2026.09.23

    160

    15

    Buffalo框架零基础入门教程
    Buffalo框架零基础入门教程

    本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

    2026.09.23

    120

    15

    Conan创建软件包配方指南
    Conan创建软件包配方指南

    本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

    2026.09.22

    80

    12

    热门下载

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

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    CSS3 极速入门
    CSS3 极速入门

    共36课时 | 9.6万人学习

    千锋PHP-CSS入门及应用视频教程
    千锋PHP-CSS入门及应用视频教程

    共18课时 | 4.2万人学习