JavaScript 实现 Hover 联动:根据 ID 匹配不同父元素下的元素

javascript 实现 hover 联动:根据 id 匹配不同父元素下的元素

本文将介绍如何使用 JavaScript 实现一个常见的交互效果:当鼠标悬停在一个区域的特定元素上时,联动改变另一个区域中具有相同 ID 的元素的样式。我们将通过事件监听和 DOM操作,实现当鼠标悬停在 `.first` 区域的 `

` 元素上时,`.second` 区域中具有相同 ID 的 “ 元素添加 `.active` 类,移开鼠标时移除该类。这种方法适用于 ID 动态生成的情况,提供了一种灵活的解决方案。

实现原理

核心思路是通过 JavaScript 监听 .first 区域内

  • 元素的 mouseover 和 mouseout 事件。当 mouseover 事件触发时,获取当前
  • 元素的 ID,然后使用 querySelectorAll 查找所有具有相同 ID 的元素,并为第二个匹配到的元素(即 .second 区域内的元素)添加 .active 类。当 mouseout 事件触发时,执行相反的操作,移除 .active 类。

    具体实现步骤

    HTML 结构: 首先,我们需要定义 HTML 结构,包含两个区域 .first 和 .second,每个区域包含一个

      列表,列表中的

    • 元素具有相同的 ID。

      • Lorem
      • Ipsum
      • Dolor
      • Lorem
      • Ipsum
      • Dolor

      JavaScript 代码: 接下来,编写 JavaScript 代码来实现 hover 联动效果。

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

      document.querySelectorAll(".first ul li").forEach(li => {  li.addEventListener("mouseover", e => {    document.querySelectorAll(`#${e.target.id}`)[1].classList.add("active");  });  li.addEventListener("mouseout", e => {    document.querySelectorAll(`#${e.target.id}`)[1].classList.remove("active");  });});

      这段代码首先使用 querySelectorAll 选择 .first 区域内所有的

    • 元素。然后,使用 forEach 循环遍历这些元素,并为每个元素添加 mouseover 和 mouseout 事件监听器。

      在 mouseover 事件处理函数中,e.target.id 获取当前

    • 元素的 ID。然后,使用 querySelectorAll(#${e.target.id}`)[1]查找所有具有相同 ID 的元素,并选择第二个匹配到的元素。最后,使用classList.add(“active”)为该元素添加.active` 类。

      腾讯元宝 腾讯元宝

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

      腾讯元宝 223 查看详情 腾讯元宝

      mouseout 事件处理函数执行相反的操作,使用 classList.remove(“active”) 移除 .active 类。

      CSS 样式: 为了使 .active 类生效,我们需要定义相应的 CSS 样式。

      .active {  background: #CCC;}

      这段代码定义了 .active 类的样式,将背景色设置为灰色。

      代码示例

      将以上 HTML、JavaScript 和 CSS 代码整合在一起,即可实现完整的 hover 联动效果。

        Hover 联动示例      .active {      background: #CCC;    }    
      • Lorem
      • Ipsum
      • Dolor
      • Lorem
      • Ipsum
      • Dolor
      document.querySelectorAll(".first ul li").forEach(li => { li.addEventListener("mouseover", e => { document.querySelectorAll(`#${e.target.id}`)[1].classList.add("active"); }); li.addEventListener("mouseout", e => { document.querySelectorAll(`#${e.target.id}`)[1].classList.remove("active"); }); });

      注意事项

      ID 唯一性: 虽然本例中依赖 ID 进行匹配,但请确保页面中 ID 的唯一性,以避免潜在的问题。性能优化: 如果列表数量非常大,频繁的 DOM 操作可能会影响性能。可以考虑使用事件委托或其他优化技巧。可维护性: 为了提高代码的可维护性,可以将 JavaScript 代码封装成函数或模块。

      总结

      本文介绍了如何使用 JavaScript 实现 hover 联动效果,通过监听事件和 DOM 操作,实现了当鼠标悬停在一个区域的元素上时,联动改变另一个区域中具有相同 ID 的元素的样式。这种方法适用于 ID 动态生成的情况,提供了一种灵活的解决方案。同时,也需要注意 ID 唯一性、性能优化和代码可维护性等方面的问题。

      以上就是JavaScript 实现 Hover 联动:根据 ID 匹配不同父元素下的元素的详细内容,更多请关注创想鸟其它相关文章!

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

  • (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2025年11月11日 02:10:06
    下一篇 2025年11月11日 02:11:40

    相关推荐

    • Go语言在Android应用开发中的角色与实践:能否纯Go构建应用?

      本文探讨go语言在android应用开发中的可行性。尽管go并非android官方的一等开发语言,但开发者仍可通过go mobile等工具实现部分业务逻辑的跨平台共享,或通过jni与java/kotlin进行交互。纯go构建完整原生ui应用目前仍面临官方支持、生态系统和技术栈整合等多重挑战,主要适用…

      2025年12月16日
      000
    • 生成准确表达文章主题的标题 使用 SQL 进行选择并更新的正确方法

      本文介绍了在 postgresql 数据库中,如何安全高效地进行选择并更新操作。重点讲解了使用 `select … for update` 语句锁定行,以及通过事务保证数据一致性的方法。同时,推荐使用 `update … from` 等集合操作来提升性能,避免循环更新带来的问…

      2025年12月16日
      000
    • Go语言中高效提取HTML节点文本内容的教程

      在使用go语言进行web内容抓取和解析时,`golang.org/x/net/html`(原`code.google.com/p/go.net/html`)库是一个强大而基础的工具,它能将html文档解析成一个dom树结构。然而,对于初学者而言,一个常见的困惑是如何从一个`html.node`中提取…

      2025年12月16日
      000
    • Go语言中模拟JavaScript短路求值实现多选项变量赋值

      本文探讨了如何在go语言中实现类似javascript的短路求值(`||`操作符)来从多个选项中赋值变量。go语言强调类型安全,不直接支持非布尔类型的“真值”判断,也无三元运算符。教程将展示使用`if/else if/else`结构进行条件赋值的标准go语言实践,并强调其清晰性和类型安全的重要性。 …

      2025年12月16日
      000
    • Go 模板引擎中安全地包含 HTML 内容

      本文介绍了如何在 Go 模板引擎中安全地包含 HTML 内容。通过将 `[]byte` 或 `string` 类型转换为 `template.HTML` 类型,并修改 `Page` 结构体定义,可以避免 HTML 内容被转义,从而在模板中正确渲染 HTML。文章提供了详细的代码示例和步骤,帮助开发者…

      2025年12月16日
      000
    • 深入理解Go encoding/xml中omitempty与指针的反序列化行为

      本文旨在阐明go语言`encoding/xml`包中`omitempty`标签在处理指针类型时的反序列化(unmarshal)行为。许多开发者误以为`omitempty`能阻止空xml元素初始化指针字段,但实际上它仅影响序列化(marshal)。我们将通过具体示例,解析为何在空xml元素(如&#82…

      2025年12月16日
      000
    • Go Template 多参数传递:利用 dict 辅助函数优化数据流

      本文探讨了go模板中仅支持单个管道参数的局限性,并提供了一种优雅的解决方案。通过注册一个自定义的 `dict` 辅助函数,开发者可以模拟传递多个命名参数给子模板,从而实现更灵活、结构化的数据传递,避免了全局变量、重复代码或复杂结构体的引入,极大地提升了模板的复用性和可维护性。 Go Template…

      2025年12月16日
      000
    • Golang如何实现动态HTML模板渲染

      Go语言通过html/template包实现动态HTML渲染,首先解析模板文件并绑定数据结构,利用{{.}}占位符注入内容;支持if条件与range循环动态生成列表;可通过ParseGlob复用布局模板;默认转义HTML防止XSS,可注册自定义函数扩展功能。 在Go语言中实现动态HTML模板渲染,核…

      2025年12月16日
      000
    • Go语言中结构体嵌入的真相:为何它不是继承?

      go语言的结构体嵌入机制常被误解为面向对象语言中的继承。本文将深入探讨go语言中结构体嵌入的本质,强调它是一种组合而非继承的实现方式。通过对比go与java中类似场景的行为差异,揭示go类型系统的独特设计哲学,帮助开发者避免常见的类型赋值错误,并正确理解和运用go的组合模式。 Go语言的类型系统与结…

      2025年12月16日
      000
    • 如何在Golang中处理指针空值异常

      答案是通过nil检查和合理设计避免Go中指针解引用导致的panic。在访问指针字段前需判断是否为nil,尤其在函数参数、map查询等场景;可定义安全方法处理nil接收者;优先使用值类型或返回零值而非nil指针,结合构造函数与工厂模式确保对象有效性,必要时用recover防止程序崩溃。 在Golang…

      2025年12月16日
      000
    • 如何在Golang中实现任务列表拖拽功能

      Golang不直接实现拖拽,而是通过API支持前端拖拽功能。前端使用HTML5或SortableJS实现任务项拖动,用户调整顺序后,JavaScript将新顺序(如[2, 1])通过POST请求发送至Golang后端。后端定义/api/reorder接口,接收包含任务ID数组的JSON数据,遍历并更…

      2025年12月16日
      000
    • 如何在Golang中开发小型CRM系统

      先定义客户结构体并实现REST API,再通过net/http搭建路由,结合SQLite完成增删改查。1. 设计Customer结构体包含ID、Name、Email等字段;2. 使用net/http创建GET/POST/PUT/DELETE路由处理请求;3. 用database/sql和mattn/…

      2025年12月16日
      000
    • Golang如何在模块中进行单元测试

      在Go语言中,单元测试需遵循命名和目录结构约定,测试文件以_test.go结尾,测试函数以Test开头并接收*testing.T参数,使用go test命令运行测试,可通过-v查看详细输出,-run指定测试函数,支持覆盖率分析和性能测试。 在Go语言中,使用模块(module)进行单元测试非常直接。…

      2025年12月16日
      000
    • Go语言结构体嵌入:为何它不是面向对象继承?

      go语言的结构体嵌入机制提供了一种代码复用和组合的方式,但它与传统面向对象语言(如java)的继承概念截然不同。本文将深入探讨go结构体嵌入的本质,并通过示例代码阐明其与继承在类型系统和赋值规则上的根本区别,帮助开发者避免将两者混淆。 在Go语言的实践中,开发者常会遇到一个常见误区:将结构体嵌入(S…

      2025年12月16日
      000
    • Go语言go.net/html库:深入解析与提取html.Node的文本内容

      本文详细介绍了如何使用go语言的`go.net/html`库从html文档中提取特定`html.node`的完整文本内容。当节点包含嵌套元素时,直接获取文本会遇到挑战。教程通过递归遍历子节点并收集所有`textnode`数据的方法,提供了一个高效且通用的解决方案,并附带了具体的代码示例。 在使用Go…

      2025年12月16日
      000
    • Go 语言中结构体嵌入的真相:理解组合而非继承

      本文深入探讨go语言中结构体嵌入的机制,澄清了其与传统面向对象语言(如java)中继承概念的区别。go的结构体嵌入本质上是一种组合(composition)的语法糖,而非继承(inheritance),这解释了为何不能将包含嵌入结构体的类型直接赋值给嵌入结构体类型的指针,但可以通过实现接口来达到多态…

      2025年12月16日
      000
    • Golang如何在Web开发中处理表单错误

      Go语言中处理表单错误需先解析表单数据,使用ParseForm或PostFormValue获取字段值,接着通过手动验证或第三方库检查输入合法性,并用map收集错误信息;若存在错误,则构建包含原始数据和错误提示的结构体,重新渲染页面以保留用户输入,结合模板显示错误消息并用CSS高亮问题字段,避免重定向…

      2025年12月16日
      000
    • Go net/http:高效获取URL查询参数的FormValue方法

      本文详细介绍了在go语言的`net/http`包中如何高效地获取url查询参数,解答了node.js中`request.param`在go中的对应实现。核心是利用`*http.request`对象的`formvalue`方法,它能便捷地提取指定名称的参数值,并兼顾了post/put请求体参数的优先级…

      2025年12月16日
      000
    • Go语言中获取URL查询参数:net/http包的FormValue方法详解

      本文详细介绍了go语言标准库`net/http`中获取url查询参数的核心方法`formvalue`。针对开发者在处理http请求时,如何高效、准确地提取url路径后的查询字符串参数(如`?token=xxx`)这一常见需求,文章通过示例代码演示了`formvalue`的用法,并探讨了其内部机制、优…

      2025年12月16日
      000
    • Go语言结构体初始化:模拟构造函数与最佳实践

      go语言没有传统意义上的类和构造函数,但开发者常需为结构体设置初始默认值或进行参数化初始化。本文将深入探讨go语言中实现“构造函数”功能的最佳实践,主要通过约定俗成的`new`函数模式来创建和初始化结构体实例,并讨论返回指针或值类型的不同场景及命名规范,旨在帮助开发者高效、规范地管理结构体生命周期。…

      2025年12月16日
      000

    发表回复

    登录后才能评论
    关注微信