全部分类
云杰同学_1599
2026-01-21
766人浏览
原创
本文介绍一种简洁可靠的 javascript 方案,通过为菜单项和内容区块建立类名/id 映射关系,实现单击切换显示指定内容、自动隐藏其他内容的效果,彻底解决因 `` 标签默认跳转导致的“闪退”问题。
在构建多级导航或分类内容展示页面时,常需实现“点击标题 → 展开对应内容区块”的交互效果。原始代码中使用 包裹可点击区域,虽语义上看似合理,但其默认行为会触发页面跳转(即使 href=""),导致目标 .hidden 元素短暂显示后立即刷新或重置,造成“一闪而逝”的问题。
根本解法是:移除 标签,改用语义更清晰、无默认行为的 或 作为触发器,并通过 CSS 类控制显隐。以下是推荐的完整实现方案:✅ 推荐结构(语义清晰 + 行为可控) <!-- 主菜单区(无链接,仅触发) --> <div class="main-cont"> <div class="link first"><p>Matrix Calculations</p></div> <div class="link second"><p>Vector Calculations</p></div> <div class="link third"><p><span>Trigonometric</span> Calculations</p></div> <div class="link fourth"><p>Integration &<br>Differentiation</p></div> </div> <!-- 所有内容区块统一包裹在容器中,便于批量操作 --> <div id="sub-contents"> <div class="hidden" id="first"> <h2>Matrix Calculations</h2> <div class="main-cont"> <div class="sub-cont matrix"><p>Basic <br>Calculations</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill10721" title="China SEO Baidu"><img src="https://img.php.cn/upload/skill/001/246/273/6adaf20cf0281539.jpg" alt="China SEO Baidu" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill10721" title="China SEO Baidu" class="overflowclass">China SEO Baidu</a> <p class="overflowclass">针对百度搜索引擎优化网站(百度SEO),教授AI智能体如何实施百度专属SEO技术,包括百度站长工具设置、ICP备案等</p> </div> <a rel="nofollow" href="/xiazai/skill10721" title="China SEO Baidu" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div></div> <div class="sub-cont matrix"><p>Determinant<br>of matrix</p></div> <div class="sub-cont third matrix"><p><span>Inverse &</span><br>Transposition</p></div> <div class="sub-cont matrix"><p>Eigen values &<br>Vectors</p></div> </div> </div> <div class="hidden" id="second"> <h2>Vector Calculations</h2> <!-- 同理省略其余子项 --> </div> <div class="hidden" id="third"> <h2>Trigonometric Calculations</h2> </div> <div class="hidden" id="fourth"> <h2>Calculus Calculations</h2> </div> </div> ✅ 核心 JavaScript(简洁高效) // 获取所有触发元素与内容容器 const triggers = document.querySelectorAll('.link'); const contentSections = Array.from(document.getElementById('sub-contents').children); triggers.forEach(trigger => { trigger.addEventListener('click', function() { const targetId = this.classList[1]; // 如 'first', 'second'... // 遍历所有内容区块:仅显示匹配 ID 的,其余隐藏 contentSections.forEach(section => { section.classList.toggle('show', section.id === targetId); }); }); }); ✅ 必备 CSS(控制显隐与交互反馈) .hidden { display: none; } .show { display: block; } .link { cursor: pointer; padding: 8px 12px; user-select: none; } .link:hover { background-color: #f5f5f5; border-radius: 4px; } /* 可选:添加平滑过渡 */ .hidden.show { animation: fadeIn 0.2s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } } ⚠️ 关键注意事项 禁止使用 作为纯触发器:若必须保留链接语义(如 SEO 或无障碍需求),请添加 event.preventDefault(),但推荐优先使用 或语义化 。 ID 与 class 名严格一致:确保 .link.first 对应 #first,这是映射逻辑的基础。 初始状态需统一:所有 .hidden 元素默认不显示,首次点击才激活;可通过 JS 初始化显示首个区块(如 document.getElementById('first').classList.add('show'))。 可访问性增强:为 .link 添加 role="button" 和 tabindex="0",并监听 Enter/Space 键事件,提升键盘用户支持。 该方案轻量、可维护性强,且完全规避了表单提交或页面跳转干扰,是现代前端中实现内容切换的推荐实践。
<!-- 主菜单区(无链接,仅触发) --> <div class="main-cont"> <div class="link first"><p>Matrix Calculations</p></div> <div class="link second"><p>Vector Calculations</p></div> <div class="link third"><p><span>Trigonometric</span> Calculations</p></div> <div class="link fourth"><p>Integration &<br>Differentiation</p></div> </div> <!-- 所有内容区块统一包裹在容器中,便于批量操作 --> <div id="sub-contents"> <div class="hidden" id="first"> <h2>Matrix Calculations</h2> <div class="main-cont"> <div class="sub-cont matrix"><p>Basic <br>Calculations</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill10721" title="China SEO Baidu"><img src="https://img.php.cn/upload/skill/001/246/273/6adaf20cf0281539.jpg" alt="China SEO Baidu" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill10721" title="China SEO Baidu" class="overflowclass">China SEO Baidu</a> <p class="overflowclass">针对百度搜索引擎优化网站(百度SEO),教授AI智能体如何实施百度专属SEO技术,包括百度站长工具设置、ICP备案等</p> </div> <a rel="nofollow" href="/xiazai/skill10721" title="China SEO Baidu" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div></div> <div class="sub-cont matrix"><p>Determinant<br>of matrix</p></div> <div class="sub-cont third matrix"><p><span>Inverse &</span><br>Transposition</p></div> <div class="sub-cont matrix"><p>Eigen values &<br>Vectors</p></div> </div> </div> <div class="hidden" id="second"> <h2>Vector Calculations</h2> <!-- 同理省略其余子项 --> </div> <div class="hidden" id="third"> <h2>Trigonometric Calculations</h2> </div> <div class="hidden" id="fourth"> <h2>Calculus Calculations</h2> </div> </div>
// 获取所有触发元素与内容容器 const triggers = document.querySelectorAll('.link'); const contentSections = Array.from(document.getElementById('sub-contents').children); triggers.forEach(trigger => { trigger.addEventListener('click', function() { const targetId = this.classList[1]; // 如 'first', 'second'... // 遍历所有内容区块:仅显示匹配 ID 的,其余隐藏 contentSections.forEach(section => { section.classList.toggle('show', section.id === targetId); }); }); });
.hidden { display: none; } .show { display: block; } .link { cursor: pointer; padding: 8px 12px; user-select: none; } .link:hover { background-color: #f5f5f5; border-radius: 4px; } /* 可选:添加平滑过渡 */ .hidden.show { animation: fadeIn 0.2s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } }
该方案轻量、可维护性强,且完全规避了表单提交或页面跳转干扰,是现代前端中实现内容切换的推荐实践。
Java免费学习笔记:立即使用 解锁 Java 大师之旅:从入门到精通的终极指南
相关文章
HTML简历制作怎样提升加载速度?网页秒开优化秘诀
为什么CSS浮动元素能挡住div却挡不住文字?
HTML中字幕标签怎么换行?文本格式调整技巧
HTML字幕标签背景透明度的修改技巧
如何使用 Tailwind CSS 实现基于可用空间的动态行列布局
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:如何解决网页缩放时 Logo 位置偏移的问题
下一篇:如何通过 CSS 动画延迟 Turbo Frame 的加载时机
作者最新文章
如何解决 CSS 文件仅在 Live Server 下生效的问题?
如何在 Angular 中安全渲染并执行动态 HTML 字符串中的指令与事件
如何解决 PDFMake 中第二个表格表头文字不显示的问题
PDFMake 表格表头重复使用失效问题的解决方案
如何解决 PDFMake 中并排表格第二张表表头文字不显示的问题
PDFMake 中并列表格的表头重复使用导致右侧表格标题不显示的解决方案
如何解决 WordPress 自定义 CSS 全局样式不生效的问题
如何在现代浏览器中正确实现网页音频自动播放
如何在现代浏览器中正确实现网页音频自动播放(含解决方案与最佳实践)
Fancybox 无法加载 Google Drive 图片链接的完整解决方案
热门AI工具
咔片AIPPT
DeepSeek
花生AI
讯飞绘文
音述AI
豆包大模型
蛙蛙写作
UP简历
相关专题
在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。
2024.01.03
4316
7
本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。
2025.12.06
306
9
php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。
2023.06.20
4696
8
JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。
2023.07.28
1395
5
js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。
2023.08.03
1838
JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。
2023.08.17
10263
11
js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。
2023.09.01
1020
4
js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。
2023.09.04
2964
Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。
2023.09.14
1629
热门下载
相关下载
精品课程
共0课时 | 0人学习
共14课时 | 1.6万人学习
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
共22课时 | 2.5万人学习
共31课时 | 3.5万人学习
共28课时 | 4.5万人学习
最新文章