[英]Accordion switching icon not working properly
I am trying to add to my accordion minus sign to appear after clicking on the row.我正在尝试添加到我的手风琴减号以在单击该行后出现。
I've tried adding minus/plus let and tried to add display.styles for it.我尝试添加减号/加号let 并尝试为其添加 display.styles 。 But it seems really buggy and not working properly.但它似乎真的有问题并且不能正常工作。 How can I set this up properly?我该如何正确设置? And it only works for first element instead of all.它只适用于第一个元素而不是所有元素。
const tabs = document.querySelectorAll(".faq__tab").forEach(button => { button.addEventListener("click", () => { const tabsContent = button.nextElementSibling; button.classList.toggle('active-faq'); let minus = document.querySelector(".plus") let plus = document.querySelector(".minus") if (button.classList.contains('active-faq')) { tabsContent.style.maxHeight = tabsContent.scrollHeight + 'px'; plus.style.display = 'none'; minus.style.display = 'flex'; } else { tabsContent.style.maxHeight = 0; minus.style.display = 'none'; plus.style.display = 'flex'; } }) });
.plus { padding-left: 10px; } .minus { padding-left: 10px; display: none; } .faq__panel { max-height: 0px; overflow: hidden; }
<button class="faq__tab">Question <img src='img/plus.svg' alt="Show" class="plus"> <img src='img/minus-svg.png' alt="Hide" class="minus"> </button> <div class="faq__panel"> <p>Answerr </p> </div>
You probably need to use inline-flex
instead of flex
:您可能需要使用inline-flex
而不是flex
:
const tabs = document.querySelectorAll(".faq__tab").forEach(button => { button.addEventListener("click", () => { const tabsContent = button.nextElementSibling; button.classList.toggle('active-faq'); let minus = button.querySelector(".plus");//instead of document use button to target the corresponding element let plus = button.querySelector(".minus");//instead of document use button to target the corresponding element if (button.classList.contains('active-faq')) { tabsContent.style.maxHeight = tabsContent.scrollHeight + 'px'; minus.style.display = 'none'; plus.style.display = 'inline-flex'; } else { tabsContent.style.maxHeight = 0; plus.style.display = 'none'; minus.style.display = 'inline-flex'; } }) });
.plus { padding-left: 10px; } .minus { padding-left: 10px; display: none; } .faq__panel { max-height: 0px; overflow: hidden; }
<button class="faq__tab">Question1 <img src='img/plus.svg' alt="Show" class="plus"> <img src='img/minus-svg.png' alt="Hide" class="minus"> </button> <div class="faq__panel"> <p>Answer1</p> </div> <button class="faq__tab">Question2 <img src='img/plus.svg' alt="Show" class="plus"> <img src='img/minus-svg.png' alt="Hide" class="minus"> </button> <div class="faq__panel"> <p>Answer2</p> </div>
The problem in that you're setting image display to flex
, either give the button faq__tab
display: flex
in the css file, or set display: inline
to images问题在于您将图像显示设置为flex
,要么在 css 文件中给按钮faq__tab
display: flex
,要么设置display: inline
to images
if (button.classList.contains('active-faq')) {
tabsContent.style.maxHeight = tabsContent.scrollHeight + 'px';
plus.style.display = 'none';
minus.style.display = 'inline';
} else {
tabsContent.style.maxHeight = 0;
minus.style.display = 'none';
plus.style.display = 'inline';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.