[英]Why is the class - .menu-hidden not being removed when i click the Show more button
Here is the html这是html
<ul class="menu__box d-flex flex-column " id="menu-ul">
<div class="menu-title-container d-flex align-items-center justify-content-center">
<p class="menu-title">Most Popular</p>
</div>
<li><a class="menu__item" href="#">Batteries</a></li>
<li><a class="menu__item" href="#">Engine Oil</a></li>
<li><a class="menu__item" href="#">Spark Plugs</a></li>
<li><a class="menu__item" href="#">Tyres</a></li>
<li><a class="menu__item menu-hidden" href="#">ATF</a></li>
<li><a class="menu__item menu-hidden" href="#">Rims</a></li>
<li><a class="menu__item menu-hidden" href="#">MOBIS Hyundai</a></li>
<li class="menu-btn-expand"><a class="menu__item" href="#" id="showMore">Show More</a></li>
<div class="menu-title-container d-flex align-items-center justify-content-center">
<p class="menu-title">Shop Deals</p>
</div>
<li><a class="menu__item" href="#">Top Deals</a></li>
<div class="menu-title-container d-flex align-items-center justify-content-center">
<p class="menu-title">Shop By</p>
</div>
<li><a class="menu__item" href="#">By Make</a></li>
<li><a class="menu__item" href="#">By Model</a></li>
<div class="menu-title-container d-flex align-items-center justify-content-center">
<p class="menu-title">Trustworthy Advice</p>
</div>
<li><a class="menu__item" href="#">Advice & How to's</a></li>
<li><a class="menu__item" href="#">Find Us</a></li>
<div class="menu-title-container d-flex align-items-center justify-content-center">
<p class="menu-title">Contact Us</p>
</div>
<li><a class="menu__item" href="#">Contact</a></li>
</ul>
</div>
</div>
Here is the CSS这是CSS
#menu__toggle {
opacity: 0;
}
#menu__toggle:checked ~ .menu__btn > span {
transform: rotate(45deg);
}
#menu__toggle:checked ~ .menu__btn > span::before {
top: 0;
transform: rotate(0);
}
#menu__toggle:checked ~ .menu__btn > span::after {
top: 0;
transform: rotate(90deg);
}
#menu__toggle:checked ~ .menu__box {
visibility: visible;
left: 0;
}
.menu__btn {
display: flex;
align-items: center;
position: relative;
top: -1rem;
left: 3rem;
width: 26px;
height: 26px;
cursor: pointer;
z-index: 1;
}
.menu__btn > span,
.menu__btn > span::before,
.menu__btn > span::after {
display: block;
position: absolute;
width: 100%;
height: 5px;
background-color: #616161;
transition-duration: 0.25s;
}
.menu__btn > span::before {
content: "";
top: -8px;
}
.menu__btn > span::after {
content: "";
top: 8px;
}
.menu__box {
display: block;
position: fixed;
visibility: hidden;
left: -100%;
width: 300px;
height: 70%;
margin: 0;
padding: 1rem 0;
list-style: none;
background-color: #fff;
box-shadow: 1px 0px 6px rgba(0, 0, 0, 0.2);
border-right: 1px solid black;
border-top: 1px solid black;
overflow: auto !important;
transition-duration: 0.25s;
}
.menu__box li a {
font-size: 0.8rem;
font-family: "Poppins";
}
.menu__item {
display: block;
padding: 12px 24px;
color: #333;
font-family: "Roboto", sans-serif;
font-size: 20px;
font-weight: 600;
text-decoration: none;
border-top: none;
transition-duration: 0.25s;
}
.menu__item:hover {
background-color: #f5f5f5;
}
.menu-line-break {
background-color: #f5f5f5;
width: 3rem;
height: 0.2rem;
margin: 0.5rem auto;
}
.menu-btn-expand {
text-decoration: underline;
}
.menu-title-container {
width: 100%;
}
.menu-hidden {
display: none;
}
The Javascript Javascript
let showMore = document.querySelector('#showMore');
showMore.addEventListener('click' , () => {
let hiddenLi = document.querySelectorAll('.menu__item');
hiddenLi.classList.remove("menu-hidden")
})
The initial li with the class of menu-hidden is put on display none .具有 menu-hidden 类的初始 li 显示为 none 。 However , when i am removing the class as seen in my code the li still do not show.
但是,当我删除我的代码中看到的类时,li 仍然没有显示。 What's the solution , I appreciate the help .
什么是解决方案,我很感激帮助。 I am kind of new to this so I might be making a silly mistake i do not know.
我对此很陌生,所以我可能会犯一个我不知道的愚蠢错误。
The class stays because document.querySelectorAll('.menu__item');
该类保持不变,因为
document.querySelectorAll('.menu__item');
gets every element with that class.获取该类的每个元素。 So you need to remove the class from each element, which can be done with a for-loop.
因此,您需要从每个元素中删除该类,这可以通过 for 循环来完成。
let showMore = document.querySelector('#showMore'); showMore.addEventListener('click' , () => { let hiddenLi = document.querySelectorAll('.menu__item'); for (var i = 0; i < hiddenLi.length; i++) { hiddenLi[i].classList.remove("menu-hidden") } })
.menu-hidden { display: none; } li { list-style-type: none; }
<ul> <li><a class="menu__item" href="#">Spark Plugs</a></li> <li><a class="menu__item menu-hidden" href="#">MOBIS Hyundai</a></li> <li><a class="menu__item menu-hidden" href="#">Rims</a></li> <li><a class="menu__item menu-hidden" href="#">ATF</a></li> <li class="menu-btn-expand"><a class="menu__item" href="#" id="showMore">Show More</a></li> </ul>
hiddenLi
is actually a collection. hiddenLi
实际上是一个集合。 You should run through each element of the collection.您应该遍历集合的每个元素。
let showMore = document.querySelector('#showMore'); showMore.addEventListener('click' , () => { let hiddenLi = document.querySelectorAll('.menu__item'); hiddenLi.forEach(each => each.classList.remove("menu-hidden")) })
#menu__toggle { opacity: 0; } #menu__toggle:checked ~ .menu__btn > span { transform: rotate(45deg); } #menu__toggle:checked ~ .menu__btn > span::before { top: 0; transform: rotate(0); } #menu__toggle:checked ~ .menu__btn > span::after { top: 0; transform: rotate(90deg); } #menu__toggle:checked ~ .menu__box { visibility: visible; left: 0; } .menu__btn { display: flex; align-items: center; position: relative; top: -1rem; left: 3rem; width: 26px; height: 26px; cursor: pointer; z-index: 1; } .menu__btn > span, .menu__btn > span::before, .menu__btn > span::after { display: block; position: absolute; width: 100%; height: 5px; background-color: #616161; transition-duration: 0.25s; } .menu__btn > span::before { content: ""; top: -8px; } .menu__btn > span::after { content: ""; top: 8px; } .menu__box { display: block; /* position: fixed; visibility: hidden; */ left: -100%; width: 300px; height: 70%; margin: 0; padding: 1rem 0; list-style: none; background-color: #fff; box-shadow: 1px 0px 6px rgba(0, 0, 0, 0.2); border-right: 1px solid black; border-top: 1px solid black; overflow: auto !important; transition-duration: 0.25s; } .menu__box li a { font-size: 0.8rem; font-family: "Poppins"; } .menu__item { display: block; padding: 12px 24px; color: #333; font-family: "Roboto", sans-serif; font-size: 20px; font-weight: 600; text-decoration: none; border-top: none; transition-duration: 0.25s; } .menu__item:hover { background-color: #f5f5f5; } .menu-line-break { background-color: #f5f5f5; width: 3rem; height: 0.2rem; margin: 0.5rem auto; } .menu-btn-expand { text-decoration: underline; } .menu-title-container { width: 100%; } .menu-hidden { display: none; }
<ul class="menu__box d-flex flex-column " id="menu-ul"> <div class="menu-title-container d-flex align-items-center justify-content-center"> <p class="menu-title">Most Popular</p> </div> <li><a class="menu__item" href="#">Batteries</a></li> <li><a class="menu__item" href="#">Engine Oil</a></li> <li><a class="menu__item" href="#">Spark Plugs</a></li> <li><a class="menu__item" href="#">Tyres</a></li> <li><a class="menu__item menu-hidden" href="#">ATF</a></li> <li><a class="menu__item menu-hidden" href="#">Rims</a></li> <li><a class="menu__item menu-hidden" href="#">MOBIS Hyundai</a></li> <li class="menu-btn-expand"><a class="menu__item" href="#" id="showMore">Show More</a></li> <div class="menu-title-container d-flex align-items-center justify-content-center"> <p class="menu-title">Shop Deals</p> </div> <li><a class="menu__item" href="#">Top Deals</a></li> <div class="menu-title-container d-flex align-items-center justify-content-center"> <p class="menu-title">Shop By</p> </div> <li><a class="menu__item" href="#">By Make</a></li> <li><a class="menu__item" href="#">By Model</a></li> <div class="menu-title-container d-flex align-items-center justify-content-center"> <p class="menu-title">Trustworthy Advice</p> </div> <li><a class="menu__item" href="#">Advice & How to's</a></li> <li><a class="menu__item" href="#">Find Us</a></li> <div class="menu-title-container d-flex align-items-center justify-content-center"> <p class="menu-title">Contact Us</p> </div> <li><a class="menu__item" href="#">Contact</a></li> </ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.