javascript - 我有一个包含三个项目的 CSS 导航栏。我想让每个链接显示自己的内容而不重叠另一个
问题描述
这是我到目前为止所拥有的,它工作正常,但一旦激活另一个链接就不会消失。
function skillsFunction () {
var x = document.getElementById("mySkills");
if (x.style.display == "none"){
x.style.display = "block"; {}
} else {
x.style.display = "none";
}
}
let openTab = (event, tabNumber) => {
const tabContent = document.getElementsByClassName("tabContent");
for(let tab of tabContent) {
tab.style.display = "none";
}
document.getElementById(tabNumber).style.display = "block";
}
<div class="tabs">
<span class="tab" onclick="openTab(event,1)">Projects</span>
<span class="tab" onclick="openTab(event,2)">Skills</span>
<span class="tab" onclick="openTab(event,3)">Courses</span>
</div>
<div class="mySkills" id="2"></div>
<div class="myCourses" id="3"></div>
<!--START OF PROJECTS WRAPPER-->
<div class="projectsWrapper" id="1">
这是我第一次使用 JavaScript。
解决方案
好吧,首先使用 HTML 来处理点击通常不是一个好习惯onclick=""
,所以我们宁愿使用 JS 来附加一个事件监听器。
在 HTML 中,将tabContent
缺少的类添加id
到每个选项卡,然后添加"div" + tabId
到每个正文内容(ID 可以是您想要的任何内容,只要保持它们相同即可)。还添加display:none
以最初关闭内容(可能选择一个开始打开并保持没有display:none
)(当然更改布局/任何内容以适应您的 HTML 的其余部分):
然后,在 JS 中初始化选项卡和选项卡内容,并为每个选项卡添加一个单击事件侦听器,该侦听器隐藏每个选项卡内容,然后显示与 tabId 匹配的选项卡。
const tabs = document.getElementsByClassName("tab");
const tabContent = document.getElementsByClassName("tabContent");
for(var i = 0; i < tabs.length; i++) {
tabs[i].addEventListener("click", function(event) {
for(var i = 0; i < tabContent.length; i++) {
tabContent[i].style.display = "none";
}
var tabId = event.target.id;
document.getElementById("div" + tabId).style.display = "block";
});
}
<span id="PROJECTS" class="tab">Projects</span>
<span id="SKILLS" class="tab">Skills</span>
<span id="COURSES" class="tab">Courses</span>
<div class="mySkills tabContent" id="divSKILLS" style="display:none">
Skills
</div>
<div class="myCourses tabContent" id="divCOURSES" style="display:none">
Courses
</div>
<div class="projectsWrapper tabContent" id="divPROJECTS" style="display:none">
Projects
</div>
让我知道事情的后续!
推荐阅读
- python - pygame中的屏幕不刷新
- ruby-on-rails - 不要在 Rails 活动存储中嵌套文件
- android - 如何在 Flutter 中加载本地化的资产变体?
- ajax - 根据 ASP.NET Core MVC 中的 DropDownList 中的选择获取信息
- javascript - 如果下载确认设置为 ON,如何使用 chrome.downloads 扩展 API 修复下载自动中断?
- triggers - 难以重置值
- java - 我们可以在一个项目中拥有多个 Spring 配置文件吗?
- field - 如何在 ARC GIS Pro 中使用 if-then 条件语句替换属性表中的观察值
- sql - SQL Server - 迁移到内存表期间出现内存配额错误
- html - 将文本链接到 ASP.NET MVC 中的另一个页面