Прежде всего, если это для проекта, рассмотрите возможность использования библиотеки, такой как FancyTree .Эти библиотеки очень эффективны и предлагают множество вариантов настройки.
Вот решение.Я добавил новый атрибут ко всем <div>
s, чтобы они сохранили свое состояние.
<div class="toggle-btn" data-div="close"></div>
Затем я обработал событие, посмотрев на этот атрибут и сбросив состояние закрытых листьев на его основе.Вот оригинальный фрагмент с внесенными изменениями:
$(function () {
$("#collapse li").children('ul').hide();
$(".toggle-btn").on('click', function (event) {
let div = $(this);
let list = div.next('ul');
list.stop().slideToggle(150);
div.toggleClass('active');
if(div.attr("data-div") === "open") {
list.find('ul').hide();
list.find('div').removeClass('active');
list.find('div').attr("data-div", "close");
}
div.attr("data-div", "open")
event.stopPropagation();
});
});
#collapse, ul {
display:block;
list-style:none;
width: 100%;
}
#collapse li {
display: flex;
width: 100%;
flex-wrap: wrap;
}
.toggle-btn {
display: flex;
overflow: hidden;
cursor: pointer;
padding: 5px 0px 0px 20px;
}
.toggle-btn::before {
content: '';
display: flex;
position: absolute;
height: 8px;
width: 2px;
background: black;
transform: rotate(0deg);
}
.toggle-btn::after {
content: '';
display: flex;
position: absolute;
height: 8px;
width: 2px;
background: black;
transform: rotate(90deg);
}
.active::before {
content: '';
display: flex;
position: absolute;
height: 8px;
width: 2px;
background: black;
transform: rotate(90deg) !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="collapse">
<li>Level 1
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 2
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 3</li>
<li>Level 3</li>
</ul>
</li>
<li>Level 2
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 3</li>
<li>Level 3</li>
</ul>
</li>
</ul>
</li>
<li>Level 1
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 2
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 3</li>
<li>Level 3</li>
</ul>
</li>
<li>Level 2
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 3</li>
<li>Level 3</li>
</ul>
</li>
</ul>
</li>
<li>Level 1
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 2
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 3</li>
<li>Level 3</li>
</ul>
</li>
<li>Level 2
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 3
<div class="toggle-btn" data-div="close"></div>
<ul>
<li>Level 4</li>
<li>Level 4</li>
</ul>
</li>
<li>Level 3</li>
</ul>
</li>
</ul>
</li>
</ul>