gpt4 book ai didi

javascript - 如何在加号和减号之间切换 Accordion ?

转载 作者:行者123 更新时间:2023-11-29 23:05:56 26 4
gpt4 key购买 nike

Codepen link.

我有 6 个父 Accordion 链接,所有链接都有 child 。在左侧,它们包含超棒的字体加号。

我想在点击时将加号切换为减号。

目前我的 plusSign 变量只获取第一个加号以表明它有效(使用 const plusSign = document.querySelector('.fa-plus');)。

非常适合第一个链接。但是,我希望这会影响所有 实例。

我尝试使用 querySelectorAll (const plusSign = document.querySelectorAll('.fa-plus');),但它根本不起作用。

代码在上面的链接中,但这里是下面的代码以防万一:

HTML:

  <!--Quick Link Box-->
<section class="quick-link-box">
<div class="columns is-desktop">
<div class="column">
<div class="card quick-link-card quick-link-card-mobile" tabindex="0">
<ul>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Control &amp; Automation</a>
<div class="panel">
<ul class="child">
<li><a href="#">Molded Machine Tool Industrial Control Transformer</a></li>
<li><a href="#">Industrial Open Core & Coil Control Transformer</a></li>
<li><a href="#">General Purpose Enclosed Transformer</a></li>
<li><a href="#">Encapsulated Control Transformer</a></li>
<li><a href="#">Energy Efficient Drive Isolation Transformer (Gen. 3)</a></li>
<li><a href="#">Energy Efficient Drive Isolation Transformer (Gen. 2)</a></li>
<li><a href="#">Drive Isolation Transformer (Gen. 1)</a></li>
<li><a href="#">Reactors</a></li>
<li><a href="#">DV/DT Filter</a></li>
<li><a href="#">Motor Starting Autotransformers</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Medium Voltage Distribution</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Low Voltage Distribution</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Encapsulated &amp; Specialty</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Custom Products</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> OEM Products</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
</ul>
</div>
</div>
</div>
</section>

JS:

const plusSign = document.querySelector('.fa-plus');

let acc = document.getElementsByClassName("accordion");
let i;

for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {

/* Toggle between hiding and showing the active panel */
let panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
plusSign.classList.remove('fa-minus');
plusSign.classList.add('fa-plus');
} else {
panel.style.display = "block";
plusSign.classList.remove('fa-plus');
plusSign.classList.add('fa-minus');
}
});
}

最佳答案

您需要使用传递给事件监听器回调函数的event对象。

event.target 会给你被点击的 a 标签,event.target.firstElementChild 会给你旁边的图标被点击的 a 标签。

let acc = document.getElementsByClassName("accordion");
let i;

for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function(e) {

/* Toggle between hiding and showing the active panel */
let panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
e.target.firstElementChild.classList.remove('fa-minus');
e.target.firstElementChild.classList.add('fa-plus');
} else {
panel.style.display = "block";
e.target.firstElementChild.classList.remove('fa-plus');
e.target.firstElementChild.classList.add('fa-minus');
}
});
}
.panel {
display: none;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Product Page</title>
<link rel="stylesheet" href="../css/main.css" />
<link
rel="stylesheet"
type="text/css"
href="/fonts/MyFontsWebfontsKit.css"
/>
<!--AOS Animate-->
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<!--Font Awesome-->
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
</head>

<body>
<section class="inner-content">

<!--Quick Link Box-->
<section class="quick-link-box">
<div class="columns is-desktop">
<div class="column">
<div class="card quick-link-card quick-link-card-mobile" tabindex="0">
<ul>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Control &amp; Automation</a>
<div class="panel">
<ul class="child">
<li><a href="#">Molded Machine Tool Industrial Control Transformer</a></li>
<li><a href="#">Industrial Open Core & Coil Control Transformer</a></li>
<li><a href="#">General Purpose Enclosed Transformer</a></li>
<li><a href="#">Encapsulated Control Transformer</a></li>
<li><a href="#">Energy Efficient Drive Isolation Transformer (Gen. 3)</a></li>
<li><a href="#">Energy Efficient Drive Isolation Transformer (Gen. 2)</a></li>
<li><a href="#">Drive Isolation Transformer (Gen. 1)</a></li>
<li><a href="#">Reactors</a></li>
<li><a href="#">DV/DT Filter</a></li>
<li><a href="#">Motor Starting Autotransformers</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Medium Voltage Distribution</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Low Voltage Distribution</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Encapsulated &amp; Specialty</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> Custom Products</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
<li>
<a class="parent accordion" tabindex="0"><i class="fa fa-plus" aria-hidden="true"></i> OEM Products</a>
<div class="panel">
<ul class="child">
<li><a href="#">Link #1</a></li>
<li><a href="#">Link #2</a></li>
<li><a href="#">Link #3</a></li>
</ul>
</div>
</li>
</ul>
</div>
</div>
</div>
</section>

</section>
<!--#inner-content-->

<!--JS-->
<script type="text/javascript" src="../lib/main.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script>
AOS.init();
</script>
</body>
</html>

关于javascript - 如何在加号和减号之间切换 Accordion ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54787996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com