Нужно объявить переменную в цикле через let. Так как для переменной объявленной таким образом на каждой итерации создается новое значение. Если использовать var, то после выполнения цикла переменная i в данном случае будет равна 1. Соответственной для всех элементов, результат выполнения кода можно описать так:
links[i].onclick = function() {
span_left[1].classList.toggle("left-part_closed");
span_right[1].classList.toggle("right-part_closed");
}
Если же использовать let, то будет выглядеть вот так:
links[i].onclick = function() {
span_left[i].classList.toggle("left-part_closed");
span_right[i].classList.toggle("right-part_closed");
}
var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
});
}
var links = document.getElementsByClassName('accordion');
var span_left = document.getElementsByClassName('ty-open-icon-left');
var span_right = document.getElementsByClassName('ty-open-icon-right');
for (let i = 0; i < links.length; i++) {
links[i].onclick = function() {
span_left[i].classList.toggle("left-part_closed");
span_right[i].classList.toggle("right-part_closed");
}
}
// Как вариант
//for ( var i = 0; i < links.length; i++) {
//links[i].onclick = function() {
// this.children[0].classList.toggle("left-part_closed");
// this.children[1].classList.toggle("right-part_closed");
//}
//}
p {
margin: 0;
}
.accordion {
cursor: pointer;
padding: 18px;
width: 100%;
transition: 0.4s;
margin-left: 50%;
display: block;
}
.panel {
padding: 0 18px;
background-color: white;
display: none;
overflow: hidden;
margin-left: 50%;
}
.ty-faq-icon-parent {
display: flex;
flex-direction: row;
margin-left: -20px;
}
.ty-open-icon-left {
display: block;
position: absolute;
width: 20px;
height: 2px;
background-color: #000;
transform: rotate(45deg);
margin-left: -13px;
transition: all 0.3s ease;
}
.ty-open-icon-right {
display: block;
position: absolute;
width: 20px;
height: 2px;
background-color: #000;
transform: rotate(-45deg);
transition: all 0.3s ease;
}
.left-part_closed {
margin-left: -6px;
}
.right-part_closed {
margin-left: -6px;
}
<a id="AccBtn" class="accordion">
<span id="left_side" class="ty-open-icon-left"></span>
<span id="right_side" class="ty-open-icon-right"></span>
<p class="ty-faq-question">Как сделать заказ</p>
</a>
<div class="panel">
<p class="ty-faq-answer">Оформить заказ можно по телефону, через WhatsApp, почту или просто через корзину сайта.</p>
</div>
<a class="accordion">
<span class="ty-open-icon-left"></span>
<span class="ty-open-icon-right"></span>
<p class="ty-faq-question">Как сделать заказ</p>
</a>
<div class="panel">
<p class="ty-faq-answer">Оформить заказ можно по телефону, через WhatsApp, почту или просто через корзину сайта.</p>
</div>