Используя vanilla javascript и css, вы можете добавить в документ один прослушиватель событий, который проверяет, является ли выбранный элемент li
, произошедшим от предполагаемого ul
, если это так, проверьте дочерний элемент ul
и переключите класс, которыйбудет скрывать это так:
document.addEventListener('click', function(event) {
if (event.target.matches('.collapsable-subs li')) {
let subList = event.target.querySelector('ul');
if (subList) {
subList.classList.toggle('collapsed')
}
}
}, false);
.collapsed {
display: none;
}
<ul class="collapsable-subs">
<li>Item 1
<ul class="collapsed">
<li>sub item 1</li>
<li>sub item 2</li>
</ul>
</li>
<li>Item 2
<ul class="collapsed">
<li>sub item 3</li>
<li>sub item 4</li>
<li>sub item 5 with subs
<ul class="collapsed">
<li>sub item 1</li>
<li>sub item 2</li>
</ul>
</li>
</ul>
</li>
</ul>
Это позволяет вложить много уровней глубоко и затрагивает ul
потомков .collapsable-subs
, если у вас есть другие вложенные ul
s встраница.Вы также можете иметь несколько ul.collapsable-subs
, которые будут иметь одинаковое поведение без дополнительных сценариев и без необходимости onclick
атрибутов.