проверить родителя у блока
<div class="parent">
<div>
<span class="child"></span>
</div>
</div>
Как проверить, что child находится в родительском блоке с классом parent?
Ответы (4 шт):
Автор решения: Alex Sazonov
→ Ссылка
В примере выше child НЕ находится в родителе с классом parent. Я привёл пример, в котором это утверждение будет истинным. Если это именно то, что нужно.
UPD:
Написал небольшую рекурсивную функцию. Можно вглубь искать родителя с нужным классом.
console.log(document.querySelector('.child').parentNode.classList.contains('parent'));
console.log(document.querySelector('.child2').parentNode.classList.contains('parent'));
function hasClassedParent(el, cssClass) {
if(el.parentNode && el.parentNode.tagName !== 'BODY') {
if(el.parentNode.classList.contains(cssClass)) {
return el.parentNode;
} else {
return hasClassedParent(el.parentNode, cssClass);
}
} else {
return null;
}
}
console.log(hasClassedParent(document.querySelector('.child3'), 'parent')); // returns element
console.log(hasClassedParent(document.querySelector('.child4'), 'parent')); // returns null
<div class="parent">
<div>
<span class="child"></span>
</div>
</div>
<div class="parent">
<span class="child2"></span>
</div>
<div class="parent">
<div id="f">
<div id="s">
<span class="child3"></span>
</div>
</div>
</div>
<div class="p">
<div id="f">
<div id="s">
<span class="child4"></span>
</div>
</div>
</div>
Автор решения: Leonid
→ Ссылка
Если имеется в виду родитель родителя:
let parentOfParent = document.querySelector('.child').parentNode.parentNode;
let isTheParent = parentOfParent?parentOfParent.classList.contains('parent'):false;
Если подниматься по ветке и искать родителя с классом parent,то надо рекурсивно подняться по дереву DOM
Автор решения: Narek
→ Ссылка
С jQuery
$(".child").parent().hasClass("parent") ? alert("Yes") : alert("No")
Автор решения: MoloF
→ Ссылка
На чистом JS, без библиотек и рекурсивных функций.
Метод Element.closest() возвращает ближайший родительский элемент (или сам элемент), который соответствует заданному CSS-селектору или null, если таковых элементов вообще нет.
document.querySelector('.child').closest('.parent')
? alert('true')
: alert('false');
<div class="parent">
<div>
<span class="child"></span>
</div>
</div>