Подскажите, как проверить есть ли у меню подменю? Моя задумка простая: если у элемента li
внутри есть элемент ul
, значит подменю содержится и родителю нужно задать класс.
<nav class="header__nav">
<ul class="header__menu">
<li><a href="#">Home</a></li>
<li><a href="#">Catalog</a>
<ul class="header__submenu">
<li>1</li>
<li>2</li>
</ul>
</li>
<li><a href="#">About</a></li>
<li><a href="#">Blog</a>
<ul class="header__submenu">
<li>1</li>
<li>2</li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
Но как это реализовать на js
никак не пойму. Вариант 1:
const menu = document.querySelector('.header__menu').children;
for (let item of menu) {
if (item.contains("UL")) {
console.log('hi');
}
}
Тут получаю ошибку, что первый параметр contains
не Node
. Я не пойму, как передать 1 параметр в contains
так, чтобы это был Node
?
2 вариант:
for (let item of menu) {
for (let i = 0; i < item.childNodes.length; i++) {
if (item.childNodes[i] == 'LI') {
console.log('hi');
}
}
}
Тоже не понятно как проверить) Подскажите, как правильно делать данную проверку?
Используйте querySelectorAll
по полной. Просто отталкивайтесь от обратного - вместо перебора, ищите сразу нужные элементы, а после их родителей.
[...document.querySelectorAll('li > ul')].forEach(ul => {
ul.parentElement.classList.add('red');
})
.red { background-color: red; }
<nav class="header__nav">
<ul class="header__menu">
<li><a href="#">Home</a></li>
<li><a href="#">Catalog</a>
<ul class="header__submenu">
<li>1</li>
<li>2</li>
</ul>
</li>
<li><a href="#">About</a></li>
<li><a href="#">Blog</a>
<ul class="header__submenu">
<li>1</li>
<li>2</li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
1 contains принимает node элемент а не тег потому и ошибка
2 нужно проверять на elem.childNodes[i].tagName
как алтернатива
const menu = document.querySelector('.header__menu').children;
for(let key of menu){
if((key.querySelector('ul'))){
console.log(key)
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
(userAnswer1 || userAnswer2) != answer - это не так сравниваетсяВедь если два ответа будут отменены, то (null || null) != answer будет true
У меня есть два компонента, в первом компоненте массив, который я хочу динамически изменить (например при нажатии на кнопку) и передать во второй...
Всем привет! У меня имеется приложение и кнопка при клике на которую появляется модальное окно(в нем содержатся продукты взятые из store(redux))При...
При нажатии <button> выполняется функция f1()Функция получает div