Как найти следующий ul при hover на ссылку?
По структуре у меня есть menu и submenu:
<ul class ="menu">
<li class="menu__item"><a href="#" class = 'menu__link'>Menu with sub menu</a></li>
<ul class="submenu">
<li><a href ="#">sub link 1</a></li>
...
<li><a href ="#">sub link N</a></li>
</ul>
</ul>
Как при hover на a.menu__link
Найти в DOM ul.submenu
?
Есть e.target.nextSibling;
но он найдет только слудующую a.menu__link
. Через
let links = document.querySelectorAll('.menu__link')
links.forEach (link => {
link.querySelector('ul.submenu'))
...
}
тоже не получить нужный ul так как он не внутри .menu__link а следующий за ней.
И наконец document.querySelectorAll('ul.submenu')
тоже не подходит, так как мне нужно работать только с тем submenu на ссылку которого навели.
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
NOTICE: чуть изменил html на более правильный. Когда что-то вложенное находится внутри элемента, а не сбоку...
let links = document.querySelectorAll('.menu__link')
links.forEach(link => {
link.addEventListener('mouseover', (e) => {
e.target.closest('.menu__item').querySelector('.submenu').classList.add('test');
});
link.addEventListener('mouseleave', (e) => {
e.target.closest('.menu__item').querySelector('.submenu').classList.remove('test');
});
});
.test {
border: 3px solid black;
}
.menu__item {
margin-top: 40px;
}
<ul class="menu">
<li class="menu__item"><a href="#" class='menu__link'>Menu with sub menu</a>
<ul class="submenu">
<li><a href="#">sub link 1</a></li>
...
<li><a href="#">sub link N</a></li>
</ul>
</li>
<li class="menu__item"><a href="#" class='menu__link'>Menu with sub menu 2</a>
<ul class="submenu">
<li><a href="#">sub link 1</a></li>
...
<li><a href="#">sub link N</a></li>
</ul>
</li>
<li class="menu__item"><a href="#" class='menu__link'>Menu with sub menu 3</a>
<ul class="submenu">
<li><a href="#">sub link 1</a></li>
...
<li><a href="#">sub link N</a></li>
</ul>
</li>
</ul>