如何一次显示 4 个中的 1 div 个
how to show 1 div out of 4 at a time
所以我有 4 link 秒的导航,到 4 div 秒(页面)。
我只想一次显示一个页面,页面加载后首先显示 id=home。
为了更清楚,当我点击“提款”link 时,唯一可见的页面应该是 div id="withdrawal"
HTML:
<!--navigation-->
<div class="col nav">
<ul>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="" aria-current="page" title="Home" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>Home</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Profile" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>profile</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Deposit" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>deposit</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Withdrawal" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>withdraw</p>
</a>
</div>
</li>
</ul>
</div>
<!--end of navigation-->
<!--Pages-->
<div class="tabcontent col" id="home">
<div class="text-center bg-black">
<h3 class="">HomePage</h3>
</div>
</div>
<div class="tabcontent" id="profile">
<div class="text-center bg-primary">
<h3>Profile</h3>
</div>
</div>
<div class="tabcontent" id="deposit">
<div class="text-center bg-danger">
<h3>Deposit</h3>
</div>
</div>
<div class="tabcontent" id="withdrawal">
<div class="text-center bg-warning">
<h3>Withdrawal</h3>
</div>
</div>
<!--End of Pages-->
CSS:
.tabcontent{
display: none;
color: white;
}
JS:
<script>
function openPage() {
// Hide all elements with class="tabcontent" by default */
var i, tabcontent;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
// Show this tab content on page load
document.getElementById("home").style.display = "block";
}
</script>
我也不介意任何 jqueries 的答案,只要它能正常工作。
我做了一个函数,用 class .tabcontent
隐藏每个 div
。
我向每个 a
添加了一个 evenListener 以查找具有相同 id
的 .tabcontent div
给出了 data-target
的内容。
这会将样式更改为 block
,其他 div
具有 style: none
.
const links = Array.from(document.querySelectorAll("a"));
const tabs = Array.from(document.querySelectorAll(".tabcontent"))
const hideAll = () => tabs.forEach((tab)=>tab.style.display = "none");
hideAll();
links.forEach((link)=>{
link.addEventListener("click", (e)=>{
e.preventDefault();
hideAll();
tabs.filter(tab => tab.id === link.dataset.target)[0].style.display = "block";
});
});
<div class="col nav">
<ul>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="" aria-current="page" title="Home" data-bs-toggle="tooltip" data-bs-placement="right" data-target="home">
<i class="fa-solid fa-house-user bi"></i>
<p>Home</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Profile" data-bs-toggle="tooltip" data-bs-placement="right" data-target="profile">
<i class="fa-solid fa-house-user bi"></i>
<p>profile</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Deposit" data-bs-toggle="tooltip" data-bs-placement="right" data-target="deposit">
<i class="fa-solid fa-house-user bi"></i>
<p>deposit</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Withdrawal" data-bs-toggle="tooltip" data-bs-placement="right" data-target="withdrawal">
<i class="fa-solid fa-house-user bi"></i>
<p>withdrawal</p>
</a>
</div>
</li>
</ul>
</div>
<!--end of navigation-->
<!--Pages-->
<div class="tabcontent col" id="home">
<div class="text-center bg-black">
<h3 class="">HomePage</h3>
</div>
</div>
<div class="tabcontent" id="profile">
<div class="text-center bg-primary">
<h3>Profile</h3>
</div>
</div>
<div class="tabcontent" id="deposit">
<div class="text-center bg-danger">
<h3>Deposit</h3>
</div>
</div>
<div class="tabcontent" id="withdrawal">
<div class="text-center bg-warning">
<h3>Withdrawal</h3>
</div>
</div>
如果您只是想让它工作而不关心如何工作,请考虑 Bootstrap。
为什么要重新发明轮子?
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!-- JavaScript Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contact</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">Home</div>
<div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">Profile</div>
<div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">Contact</div>
</div>
如果您只想显示 x 个元素中的 1 个,我建议在函数中使用 switch 语句,或者将元素包含在对象中,该对象也有一个“isSelected”属性 以了解遍历时显示哪一个。
例如开关:
let links = ['home', 'profile', 'deposit', 'withdrawal'] // in practise use variable references to the element, preferably by id since the nav won't be changing
const displayDiv = (whichdiv)=>{
switch(whichdiv){
case 'home': // use elements, not strings, this is just for demonstration purposes
return homeDiv // the div you want to be shown, returning this will let you append just the one you want to show to the container it sits in
case 'profile':
return profilediv
case 'deposit':
return depositDiv
case 'withdrawal':
return withdrawalDiv
}
}
const clickhandler = (evt)=>{
evt.preventDefault()
let whichIsSelected = displayDiv('home') // whichIsSelected is now the element you want to be shown
// remove any div inside the container, then append whichIsSelected to the container
}
我更喜欢的方式是使用一个同时包含 div 和它是否被选中的对象,然后将所有这些对象包含在一个数组中,这样您就可以遍历它们并确保当另一个更改为 true 时,未选中的 属性 更改为 false。例如:
let contentContainerDiv = getElementById('content-container-div')
let home = getElementById('home-div')
let profile = getElementById('profile-div')
let deposit = getElementById('deposit-div')
let withdrawal = getElementById('withdrawal-div')
let objhome = {
page: home,
isSelected: true // default set to home
}
let objprofile = {
page: profile,
isSelected: false
}
let objdeposit = {
page: deposit,
isSelected: false
}
let objwithdrawal = {
page: withdrawal,
isSelected: false
}
let pages = [objhome, objprofile, objdeposit, objwithdrawal]
function clickHandler(evt){
evt.preventDefault()
pages.forEach( v => v.isSelected = false)
this.isSelected = true
loadPageThatsSelected()
}
function loadPageThatsSelected(){
let selected = pages.filter( v => v.isSelected )
contentContainerDiv.removeChild(contentContainerDiv.firstChild)
contentContainerDiv.appendChild(selected.page)
}
无论如何,我强烈建议使用唯一 ID 和对这些 ID 的变量引用
所以我有 4 link 秒的导航,到 4 div 秒(页面)。 我只想一次显示一个页面,页面加载后首先显示 id=home。
为了更清楚,当我点击“提款”link 时,唯一可见的页面应该是 div id="withdrawal"
HTML:
<!--navigation-->
<div class="col nav">
<ul>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="" aria-current="page" title="Home" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>Home</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Profile" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>profile</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Deposit" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>deposit</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Withdrawal" data-bs-toggle="tooltip" data-bs-placement="right" onclick="openPage(); return false;">
<i class="fa-solid fa-house-user bi"></i>
<p>withdraw</p>
</a>
</div>
</li>
</ul>
</div>
<!--end of navigation-->
<!--Pages-->
<div class="tabcontent col" id="home">
<div class="text-center bg-black">
<h3 class="">HomePage</h3>
</div>
</div>
<div class="tabcontent" id="profile">
<div class="text-center bg-primary">
<h3>Profile</h3>
</div>
</div>
<div class="tabcontent" id="deposit">
<div class="text-center bg-danger">
<h3>Deposit</h3>
</div>
</div>
<div class="tabcontent" id="withdrawal">
<div class="text-center bg-warning">
<h3>Withdrawal</h3>
</div>
</div>
<!--End of Pages-->
CSS:
.tabcontent{
display: none;
color: white;
}
JS:
<script>
function openPage() {
// Hide all elements with class="tabcontent" by default */
var i, tabcontent;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
// Show this tab content on page load
document.getElementById("home").style.display = "block";
}
</script>
我也不介意任何 jqueries 的答案,只要它能正常工作。
我做了一个函数,用 class .tabcontent
隐藏每个 div
。
我向每个 a
添加了一个 evenListener 以查找具有相同 id
的 .tabcontent div
给出了 data-target
的内容。
这会将样式更改为 block
,其他 div
具有 style: none
.
const links = Array.from(document.querySelectorAll("a"));
const tabs = Array.from(document.querySelectorAll(".tabcontent"))
const hideAll = () => tabs.forEach((tab)=>tab.style.display = "none");
hideAll();
links.forEach((link)=>{
link.addEventListener("click", (e)=>{
e.preventDefault();
hideAll();
tabs.filter(tab => tab.id === link.dataset.target)[0].style.display = "block";
});
});
<div class="col nav">
<ul>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="" aria-current="page" title="Home" data-bs-toggle="tooltip" data-bs-placement="right" data-target="home">
<i class="fa-solid fa-house-user bi"></i>
<p>Home</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Profile" data-bs-toggle="tooltip" data-bs-placement="right" data-target="profile">
<i class="fa-solid fa-house-user bi"></i>
<p>profile</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Deposit" data-bs-toggle="tooltip" data-bs-placement="right" data-target="deposit">
<i class="fa-solid fa-house-user bi"></i>
<p>deposit</p>
</a>
</div>
</li>
<li class="nav-item nav-li">
<div class="py-3">
<a href="#" class="" id="defaultOpen" aria-current="page" title="Withdrawal" data-bs-toggle="tooltip" data-bs-placement="right" data-target="withdrawal">
<i class="fa-solid fa-house-user bi"></i>
<p>withdrawal</p>
</a>
</div>
</li>
</ul>
</div>
<!--end of navigation-->
<!--Pages-->
<div class="tabcontent col" id="home">
<div class="text-center bg-black">
<h3 class="">HomePage</h3>
</div>
</div>
<div class="tabcontent" id="profile">
<div class="text-center bg-primary">
<h3>Profile</h3>
</div>
</div>
<div class="tabcontent" id="deposit">
<div class="text-center bg-danger">
<h3>Deposit</h3>
</div>
</div>
<div class="tabcontent" id="withdrawal">
<div class="text-center bg-warning">
<h3>Withdrawal</h3>
</div>
</div>
如果您只是想让它工作而不关心如何工作,请考虑 Bootstrap。
为什么要重新发明轮子?
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!-- JavaScript Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contact</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">Home</div>
<div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">Profile</div>
<div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">Contact</div>
</div>
如果您只想显示 x 个元素中的 1 个,我建议在函数中使用 switch 语句,或者将元素包含在对象中,该对象也有一个“isSelected”属性 以了解遍历时显示哪一个。
例如开关:
let links = ['home', 'profile', 'deposit', 'withdrawal'] // in practise use variable references to the element, preferably by id since the nav won't be changing
const displayDiv = (whichdiv)=>{
switch(whichdiv){
case 'home': // use elements, not strings, this is just for demonstration purposes
return homeDiv // the div you want to be shown, returning this will let you append just the one you want to show to the container it sits in
case 'profile':
return profilediv
case 'deposit':
return depositDiv
case 'withdrawal':
return withdrawalDiv
}
}
const clickhandler = (evt)=>{
evt.preventDefault()
let whichIsSelected = displayDiv('home') // whichIsSelected is now the element you want to be shown
// remove any div inside the container, then append whichIsSelected to the container
}
我更喜欢的方式是使用一个同时包含 div 和它是否被选中的对象,然后将所有这些对象包含在一个数组中,这样您就可以遍历它们并确保当另一个更改为 true 时,未选中的 属性 更改为 false。例如:
let contentContainerDiv = getElementById('content-container-div')
let home = getElementById('home-div')
let profile = getElementById('profile-div')
let deposit = getElementById('deposit-div')
let withdrawal = getElementById('withdrawal-div')
let objhome = {
page: home,
isSelected: true // default set to home
}
let objprofile = {
page: profile,
isSelected: false
}
let objdeposit = {
page: deposit,
isSelected: false
}
let objwithdrawal = {
page: withdrawal,
isSelected: false
}
let pages = [objhome, objprofile, objdeposit, objwithdrawal]
function clickHandler(evt){
evt.preventDefault()
pages.forEach( v => v.isSelected = false)
this.isSelected = true
loadPageThatsSelected()
}
function loadPageThatsSelected(){
let selected = pages.filter( v => v.isSelected )
contentContainerDiv.removeChild(contentContainerDiv.firstChild)
contentContainerDiv.appendChild(selected.page)
}
无论如何,我强烈建议使用唯一 ID 和对这些 ID 的变量引用