JavaScript实现tab栏切换
JavaScript实现tab栏切换

代码功能概述
这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先移除所有选项卡和内容板块已有的“激活”类名,然后给指定的选项卡及其对应的内容板块添加“激活”类名,从而实现切换显示效果,并且初始默认显示第一个选项卡及其对应的内容。
代码详细解读
- 获取页面元素:
var tabs = document.querySelectorAll('.tab');
var contents = document.querySelectorAll('.tab-content');
这里使用 document.querySelectorAll 方法分别获取了页面中所有类名为 tab 的元素(通常代表选项卡按钮等)和所有类名为 tab-content 的元素(通常代表每个选项卡对应的内容展示区域),并将它们分别存储在 tabs 和 contents 变量中。
- 定义
showTab函数:
function showTab(tabNumber) {tabs.forEach((tab) => {tab.classList.remove('active-tab');});contents.forEach((content) => {content.classList.remove('active-content');});document.getElementById('tab-' + tabNumber).classList.add('active-tab');document.getElementById('content-' + tabNumber).classList.add('active-content');
}
- 首先,函数接受一个参数 `tabNumber`,这个参数用于指定要显示的选项卡的序号(从代码逻辑推测,应该对应着 HTML 中选项卡和内容板块相关元素的编号部分)。
- 然后,通过 `forEach` 方法遍历之前获取到的所有 `tabs` 元素,对于每一个 `tab` 元素,使用 `classList.remove` 方法移除名为 `active-tab` 的类名,这样做的目的是将所有选项卡都设置为非激活状态,清除之前可能存在的激活样式等。
- 接着,同样使用 `forEach` 方法遍历 `contents` 元素,对每个 `content` 元素移除 `active-content` 类名,即将所有内容板块都设置为隐藏或非激活状态。
- 最后,通过 `document.getElementById` 方法,根据传入的 `tabNumber` 拼接出对应的选项卡和内容板块的 `id`(例如 `tab-1` 和 `content-1` 这样的形式),然后分别给对应的选项卡元素添加 `active-tab` 类名,给对应的内容板块元素添加 `active-content` 类名,从而实现将指定的选项卡和其对应的内容板块设置为激活状态并显示出来的效果。
- 初始显示设置:
showTab(1);
在脚本的最后调用了 showTab 函数并传入参数 1,这意味着页面加载时,默认会显示第一个选项卡(编号为 1 的选项卡及其对应的内容板块)处于激活状态。
可能的改进和注意事项
- 错误处理:代码没有对
document.getElementById查找元素失败的情况进行处理,如果页面中不存在对应的id元素,代码会出现错误。可以添加适当的条件判断来避免这种情况,比如判断获取到的元素是否为null,然后做相应的提示或处理。 - 动态添加元素情况:如果页面运行过程中会动态添加或删除选项卡及内容板块元素,那么
document.querySelectorAll获取到的元素集合不会自动更新,可能导致后续切换功能出现异常。这时可能需要采用事件委托等方式来更好地处理元素变化情况。 - 可扩展性和灵活性:目前代码是基于固定的类名和
id命名规则来实现功能的,如果想要更灵活地配置选项卡结构或者复用代码,可能需要将类名、id相关的规则以及功能逻辑进一步封装成更可配置的形式,例如通过配置对象传入相关参数等。
总的来说,这段代码简洁地实现了选项卡切换的基本功能,但在实际应用中,根据具体的项目需求和页面交互情况,可能需要进一步优化和完善相关逻辑及错误处理机制。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.tabChange{width: 800px;height: auto;}.tabs{display: flex;}.tab{border: 1px solid #ccc;background-color: #f1f1f1;padding: 10px 20px;margin-right: 5px;cursor: pointer;}.tab-content{display: none !important;}.active-tab{background-color: #fff;border-bottom: none;}.active-content{display: flex !important;padding: 20px;}.col-img{margin-right: 30px;}.col-img > img{width: 200px;height: 200px;}.text >p{text-indent: 2em;}</style>
</head>
<body><div class="tabchange"><div class="tabs"><div class="tab active-tab"id="tab-1"onclick="showTab(1)">派大星</div><div class="tab" id="tab-2" onclick="showTab(2)">海绵宝宝</div><div class="tab" id="tab-3" onclick="showTab(3)">章鱼哥</div><div class="tab" id="tab-4" onclick="showTab(4)">蟹老板</div></div><div class="tab-content" id="content-1"><div class="col-img"><img src="C:\Users\Administrator\Desktop\python\.vs\ann.png" alt=""></div><div class="text"><h3>派大星</h3><p>派大星(Patrick Star),美国动画片《海绵宝宝》及其衍生作品中的角色,也是海绵宝宝的好朋友。他是一只粉红色的海星,说话嗓音粗,头脑简单,四肢发达,常给大家制造麻烦,在睡觉或发呆时还会不停的流口水。他居住在自己精心打磨的石头下面,在关键时刻会想出绝妙的点子,但下一秒就已经遗忘,可是在动画片中他却是说出最多饱含深意的话的角色。</p></div></div><div class="tab-content" id="content-2"><div class="col-img"><img src="C:\Users\Administrator\Desktop\python\.vs\ann.png" alt=""></div><div class="text"><h3>海绵宝宝</h3><p>海绵宝宝(SpongeBob SquarePants)是美国动画中的角色,原设计名为“海绵男孩”,首次登场于1999年美国同名动画《海绵宝宝》,人物原型为海绵,美国配音为汤姆·肯尼,中国大陆配音为陈浩、赵路、李璐、王沄晨,中国台湾配音为魏伯勤。</p></div></div><div class="tab-content"id="content-3"><div class="col-img"><img src="C:\Users\Administrator\Desktop\python\.vs\ann.png" alt=""></div><div class="text"><h3>章鱼哥</h3><p>蟹堡王的收银员,海绵宝宝的邻居兼同事、朋友,一只大鼻子秃脑门章鱼。认为海绵宝宝和派大星很幼稚。相当自恋,有一定的艺术才能但却从未得到赏识,并对艺术有执着的追求。</p></div></div><div class="tab-content"id="content-4"><div class="col-img"><img src="C:\Users\Administrator\Desktop\python\.vs\image (1).jpg" alt=""></div><div class="text"><h3>蟹老板</h3><p>蟹老板(英文:Captain Eugene H. Armor Abs Krabs),美国动画片《海绵宝宝》系列中的主要角色之一,全名“尤金·H·阿尔莫·阿博斯·蟹Eugene H. Armor Abs Krabs”,为蟹堡王的老板。原型是一只螃蟹。</p></div></div></div><script>// 获取所有具有 '.tab' 类的DOM元素(标签)var tabs = document.querySelectorAll('.tab');// 获取所有具有 '.tab-content' 类的DOM元素(内容区域)var contents = document.querySelectorAll('.tab-content');// 定义 showTab 函数,用于切换标签页function showTab(tabNumber) {// 遍历所有标签,移除 'active-tab' 类以去除激活状态tabs.forEach(function(tab) {tab.classList.remove('active-tab');});// 遍历所有内容区域,移除 'active-content' 类以隐藏内容contents.forEach(function(content) {content.classList.remove('active-content');});// 为指定的标签添加 'active-tab' 类以显示为激活状态document.getElementById('tab-' + tabNumber).classList.add('active-tab');// 为对应的内容区域添加 'active-content' 类以显示内容document.getElementById('content-' + tabNumber).classList.add('active-content');}// 页面加载完成后,默认显示第一个标签页的内容showTab(1);</script>
</body>
</html>
相关文章:
JavaScript实现tab栏切换
JavaScript实现tab栏切换 代码功能概述 这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先…...
精确电压输出,家电和工业设备的完美选择,宽输入电压线性稳压器
WD5201线性稳压器的核心内容概述: 主要特点 • 高精度输出电压:2%精度。 • 输出电压可调:支持5V、3.3V、2.7V三档输出。 • 优化控制方式:提升效率。 • 宽输入电压范围:80305VAC。 • 无需功率电感和输入高压电…...
深入理解定时器:优先队列与时间轮实现
文章目录 1. 线程池概述线程池的基本特点: 2. 使用线程池的优先队列定时器实现2.1 优先队列定时器实现2.2 解释: 3. 使用时间轮的线程池定时器实现3.1 时间轮定时器实现 4. 总结 在定时器设计中,使用线程池来执行定时任务可以有效提高程序的性…...
autogen-agentchat 0.4.0.dev8版本的安装
1. 安装命令 pip install autogen-agentchat0.4.0.dev8 autogen-ext[openai]0.4.0.dev82. 版本检查 import autogen_agentchat print(autogen_agentchat.__version__)0.4.0.dev8import autogen_ext print(autogen_ext.__version__)0.4.0.dev83. 第一个案例 使用 autogen-age…...
JAVA |日常开发中读写XML详解
JAVA |日常开发中读写XML详解 前言一、XML 简介二、在 Java 中读取 XML2.1 使用 DOM(Document Object Model)方式读取 XML2.2 使用 SAX(Simple API for XML)方式读取 XML 三、在 Java 中写入 XML3.1 使用 DOM 方式写入…...
React 路由与组件通信:如何实现路由参数、查询参数、state和上下文的使用
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
帮我写一篇关于AI搜索网页上编写的文章是否存在版权问题的文章, 字数在 3000 字左右。文心一言提问, 记录后用.
AI搜索网页上编写的文章是否存在版权问题? 在当今科技飞速发展的时代,AI搜索工具如雨后春笋般涌现,为人们获取信息提供了极大的便利。然而,随之而来的问题是,AI搜索案例中常常出现很多内容缺乏依据,这引发…...
电脑关机的趣味小游戏——system函数、strcmp函数、goto语句的使用
文章目录 前言一. system函数1.1 system函数清理屏幕1.2 system函数暂停运行1.3 system函数电脑关机、重启 二、strcmp函数三、goto语句四、电脑关机小游戏4.1. 程序要求4.2. 游戏代码 总结 前言 今天我们写一点稍微有趣的代码,比如写一个小程序使电脑关机…...
AttributeError: ‘DataFrame‘ object has no attribute ‘append‘的参考解决方法
文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: Ubuntu20.04 一、问题描述 运行开源的python代码的时候,遇到如下问题 AttributeError: DataFrame object has no attribute append二、解决方法 报错中的DataFrame是在…...
java垃圾回收机制介绍
Java垃圾回收机制(Garbage Collection, GC)是Java编程语言中的一项重要特性,它自动管理内存,释放不再使用的对象 1. 堆(Heap): • Java虚拟机(JVM)中用于存储对象实例的内…...
SpringMVC跨域问题解决方案
当Web应用程序尝试从一个源(例如 http://localhost:9090)向另一个不同的源(例如 http://localhost:8080)发起请求时,发现报错: 报错原因:请求被CORS策略拦截了 跨域问题概述 当Web应用程序尝试…...
【语音识别】Zipformer
Zipformer 是kaldi 团队于2024研发的序列建模模型。相比较于 Conformer、Squeezeformer、E-Branchformer等主流 ASR 模型,Zipformer 具有效果更好、计算更快、更省内存等优点。并在 LibriSpeech、Aishell-1 和 WenetSpeech 等常用数据集上取得了当时最好的 ASR 结果…...
vue+uniapp+echarts的使用(H5环境下echarts)
1.安装 npm install echarts4.9.0 --save // 带版本号 2.main.js中全局引用 // import echarts from echarts // 如果是5.0以上版本用这个 import * as echarts from echarts Vue.prototype.$echartsecharts 3.使用 <template><view id"box" style"w…...
【Python网络爬虫笔记】7-网络爬虫的搜索工具re模块
目录 一、网络爬虫中的正则表达式和re模块(一)数据提取的精确性(二)处理复杂的文本结构(三)提高数据处理效率 二、正则表达式的内涵(一)、常用元字符(二)、量…...
为什么选择 React Native 作为跨端方案
为什么选择 React Native 作为跨端方案 我深刻地知道,没有完美的跨端技术,只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 适用场景 1. 业务更新迭代较快的团队与出海团队 React Native 特别适合那些业务更新频繁、需要快速响应市场的团队…...
服务器与普通电脑有什么区别?
服务器和普通电脑(通常指的是个人计算机,即PC)有众多相似之处,主要构成包含:CPU,内存,芯片,I/O总线设备,电源,机箱及操作系统软件等,鉴于使用要求…...
Oracle 12c Data Guard 环境中的 GAP 修复方法
概述 上文中提到Oracle 12c 引入了多项新技术来简化 Data Guard 环境中的 GAP 修复过程,如(RECOVER … FROM SERVICE)。这些新特性不仅减少了操作步骤,还提高了效率和准确性。本文档将详细说明如何利用这些新特性进行 GAP 修复。…...
力扣 三角dp
动态规划基础题,当前所在元素来自上一行的两列的值。 题目 从图可以看出,每一行的第一个数与最后一个数都是1,然后中间的数是来自它左上方和右上方的数的和。当然并不是要打印这个三角形的形状,因此可以想到正常的打印方式应该是…...
SQL基础语法全解析(上篇)
一、基本概念 1. 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) - 某种特定类型数据的结构化清单。模式(schema) - 关于数据库…...
【笔记】Linux服务器端使用百度网盘
1、在python环境下,下载bypy pip install bypy 2、第一次连接需要认证 bypy info 认证通过后百度网盘会出现bypy文件夹,如下 3、查看当前文件夹下的文件 bypy list 若有很多文件夹,可在后面增加文件夹名称,列出对应位置下的文件&a…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
