0

0

如何为导航项和对应内容面板动态添加/移除 active 和 show 类

聖光之護

聖光之護

发布时间:2026-01-07 14:08:24

|

688人浏览过

|

来源于php中文网

原创

如何为导航项和对应内容面板动态添加/移除 active 和 show 类

本文详解如何通过原生 javascript 实现点击导航菜单项时,自动为当前 `

  • ` 按钮及其关联的 `` 同步添加 `active` 和 `show` 类,并移除其他项的同类样式,兼容 bootstrap 5 的 tab 行为逻辑。

    在使用 Bootstrap 5 构建标签页(Tabs)时,常需手动控制 .nav-link.active 与 .tab-pane.show.active 的同步状态——尤其当默认的 data-bs-toggle="tab" 行为无法满足自定义逻辑(如配合 AJAX 加载、动画切换或非标准 DOM 结构)时。下面提供一套轻量、可靠、不依赖 jQuery 的纯 JavaScript 解决方案。

    Article Forge
    Article Forge

    行业文案AI写作软件,可自动为特定主题或行业生成内容

    下载

    ✅ 核心逻辑说明

    • 点击任意
    • 给当前点击的按钮添加 active 类;
    • 同时,根据该按钮的 data-bs-target 属性值(如 #entertainment),定位对应 ,为其添加 show active 类,并移除其他 .tab-pane 的 show active 类。

    ✅ 完整可运行代码示例

    <!-- 导航栏 -->
    <ul class="nav nav-tabs nav-pills nav-fill" id="postsTab" role="tablist">
      <li class="nav-item" role="presentation">
        <button class="nav-link active" data-bs-target="#entertainment" data-bs-toggle="tab" type="button">Entertainment</button>
      </li>
      <li class="nav-item" role="presentation">
        <button class="nav-link" data-bs-target="#infotainment" data-bs-toggle="tab" type="button">Infotainment</button>
      </li>
      <li class="nav-item" role="presentation">
        <button class="nav-link" data-bs-target="#music" data-bs-toggle="tab" type="button">Music</button>
      </li>
      <li class="nav-item" role="presentation">
        <button class="nav-link" data-bs-target="#lifestyle" data-bs-toggle="tab" type="button">Lifestyle</button>
      </li>
      <li class="nav-item" role="presentation">
        <button class="nav-link" data-bs-target="#recipe" data-bs-toggle="tab" type="button">Recipe</button>
      </li>
    </ul>
    
    <!-- 内容面板 -->
    <div class="tab-content">
      <div class="tab-pane fade show active" id="entertainment" role="tabpanel">Entertainment content</div>
      <div class="tab-pane fade" id="infotainment" role="tabpanel">Infotainment content</div>
      <div class="tab-pane fade" id="music" role="tabpanel">Music content</div>
      <div class="tab-pane fade" id="lifestyle" role="tabpanel">Lifestyle content</div>
      <div class="tab-pane fade" id="recipe" role="tabpanel">Recipe content</div>
    </div>
    // 获取导航容器与所有导航按钮
    const tabList = document.getElementById('postsTab');
    const navLinks = tabList.querySelectorAll('.nav-link');
    const tabPanes = document.querySelectorAll('.tab-pane');
    
    // 为每个导航按钮绑定点击事件
    navLinks.forEach(link => {
      link.addEventListener('click', function (e) {
        e.preventDefault(); // 阻止默认跳转(如有 href)
    
        // 1️⃣ 清除所有 .nav-link 的 active 类
        navLinks.forEach(l => l.classList.remove('active'));
    
        // 2️⃣ 为当前点击项添加 active
        this.classList.add('active');
    
        // 3️⃣ 获取目标面板 ID(来自 data-bs-target)
        const targetId = this.getAttribute('data-bs-target');
        if (!targetId) return;
    
        // 4️⃣ 清除所有 .tab-pane 的 show & active 类
        tabPanes.forEach(pane => {
          pane.classList.remove('show', 'active');
        });
    
        // 5️⃣ 为目标面板添加 show & active(确保 fade 已存在)
        const targetPane = document.querySelector(targetId);
        if (targetPane && targetPane.classList.contains('tab-pane')) {
          targetPane.classList.add('show', 'active');
        }
      });
    });

    ⚠️ 注意事项

    • 确保 data-bs-target 值与对应 #id 完全一致(含 # 符号),否则 document.querySelector() 将无法匹配;
    • 若页面中存在多个 Tab 组,请为每个组设置唯一 ID(如 #postsTab、#userTab),并分别初始化逻辑,避免事件污染;
    • Bootstrap 5 默认 .fade 类控制淡入动画,show active 是显示关键;请勿移除 fade,否则动画失效;
    • 如需支持键盘导航(Tab 键 + Enter),建议补充 keydown 事件监听(本文聚焦点击交互,略)。

    ✅ 总结

    该方案完全替代了 Bootstrap 自带的 data-bs-toggle="tab" 行为,赋予你更精细的控制权:可无缝集成加载状态、权限校验、埋点统计等扩展逻辑。代码简洁、无第三方依赖、语义清晰,适用于任何基于 Bootstrap 5 的 Tab 场景。

  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

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

    豆包大模型
    豆包大模型

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

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

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

    文心一言
    文心一言

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

    讯飞写作
    讯飞写作

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

    即梦AI
    即梦AI

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

    ChatGPT
    ChatGPT

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

    相关专题

    更多
    jquery插件有哪些
    jquery插件有哪些

    jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

    156

    2023.09.12

    jquery怎么操作json
    jquery怎么操作json

    操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

    334

    2023.10.13

    jquery删除元素的方法
    jquery删除元素的方法

    jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    406

    2023.11.10

    jQuery hover()方法的使用
    jQuery hover()方法的使用

    hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

    515

    2023.12.04

    jquery实现分页方法
    jquery实现分页方法

    在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

    312

    2023.12.06

    jquery中隐藏元素是什么
    jquery中隐藏元素是什么

    jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    128

    2024.02.23

    jquery中什么是高亮显示
    jquery中什么是高亮显示

    jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    183

    2024.02.23

    jQuery 正则表达式相关教程
    jQuery 正则表达式相关教程

    本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

    51

    2026.01.13

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    3

    2026.03.11

    热门下载

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

    精品课程

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

    共58课时 | 6万人学习

    TypeScript 教程
    TypeScript 教程

    共19课时 | 3.4万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 3.6万人学习

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

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