讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

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

胖磊小哥_5063

胖磊小哥_5063

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

|

728人浏览过

|

来源于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 解决方案。

    javascript-typescript-typescript-scaffold
    javascript-typescript-typescript-scaffold

    你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

    下载

    ✅ 核心逻辑说明

    • 点击任意
    • 给当前点击的按钮添加 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工具

    更多
    Atoms
    Atoms Hot

    Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

    码上飞
    码上飞 Hot

    一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

    UpDream
    UpDream Hot

    一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    UP简历
    UP简历 Hot

    一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    PixTV
    PixTV Hot

    PixTV是一款面向AIGC内容创作的AI视频生成工具。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    相关专题

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

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

    621

    2023.09.12

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

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

    1256

    2023.10.13

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

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

    2342

    2023.11.10

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

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

    2168

    2023.12.04

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

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

    513

    2023.12.06

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

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

    337

    2024.02.23

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

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

    906

    2024.02.23

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

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

    309

    2026.01.13

    Postman身份认证怎么配置
    Postman身份认证怎么配置

    本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

    80

    2026.11.06

    热门下载

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

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    WebStorm 官方调试文档
    WebStorm 官方调试文档

    共0课时 | 0人学习

    React 教程
    React 教程

    共58课时 | 12.5万人学习

    TypeScript 教程
    TypeScript 教程

    共19课时 | 6.8万人学习

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

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn