Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как с дочерних элементов добавить активный класс родителю? (https://javascript.ru/forum/misc/83450-kak-s-dochernikh-ehlementov-dobavit-aktivnyjj-klass-roditelyu.html)

Alexander3928 11.12.2021 14:09

Как с дочерних элементов добавить активный класс родителю?
 
Добрый день всем.
Как добавить активный класс родителю parent, когда клик происходит по дочернему butt?

<div class="parent">
        <button class="butt">Активный класс нужен родителю parent</button>
    </div>


p.s. Без jQuery пожалуйсто

ksa 11.12.2021 14:13

Цитата:

Сообщение от Alexander3928
Как добавить активный класс родителю parent, когда клик происходит по дочернему butt?

У каждого дочернего элемента есть ссылка на родителя
<элемент>.parentNode

https://developer.mozilla.org/ru/doc...ode/parentNode

Alexander3928 11.12.2021 14:23

ksa,
Но мне же все равно прийдёт сперва вытаскивать parent с document.querySelector("")? Если над этим дивом есть другие элементы кроме bodyЯ правильно понимаю?

const butt = document.querySelector(".butt")
butt.parentNode().classList.add("active")


В конце мои догадки, они верны?

рони 11.12.2021 14:33

Alexander3928,
parent click if targer .butt parent classList.add

Alexander3928 11.12.2021 16:11

рони,
У меня ситуация просто, родительский элемент по размеру дочернего. То-есть когда я навожусь я вижу дочерний элемент, а не родительский. Просто пример который я отправил в первом сообщении просто пример. А не именно моя проблема. В моей ситуации дочерний элемент по размеру родительского, поэтому я не смогу отслеживать клики по родительскому элементу. Надеюсь понятно объяснил в чем, это метод не совсем подойдёт

рони 11.12.2021 16:32

Цитата:

Сообщение от Alexander3928
В моей ситуации дочерний элемент по размеру родительского, поэтому я не смогу отслеживать клики по родительскому элементу.

какие ваши доказательства?

Alexander3928 11.12.2021 16:57

рони,
Какие доказательства? Я могу скинуть пример который у меня, но там код слегка большой.
+ У меня в другом который не использовал в качестве примера, есть элемент works_hover у него в стилях position: absolute, поэтому когда я навожусь, я вижу не родительский элемент, а works_hover.

Вот мой пример:

<a href="#" class="parent">
           <div class="works__hover"></div>
            <img src="image" class="works__img">
      </a>


У works__hover стили такие

position: absolute
top: 0
witch: 100%
height: 100%

рони 11.12.2021 17:02

Цитата:

Сообщение от Alexander3928
я вижу не родительский элемент,

как это может влиять на всплытие клика до родителя?

рони 11.12.2021 17:03

Alexander3928,
делайте макет, минимальный и описание куда жать, что сделать.

ksa 11.12.2021 18:07

Цитата:

Сообщение от Alexander3928
У меня ситуация просто, родительский элемент по размеру дочернего. То-есть когда я навожусь я вижу дочерний элемент, а не родительский.

Никакой разницы не вижу... :-?
<style type='text/css'>
.parent,
.test {
	display: inline-block;
}
.on {
	border: 2px solid red;
}
</style>
<div class="parent">
	<button class="butt">Активный класс нужен родителю parent</button>
</div>
<div class="test">
	<button>Тест</button>
</div>
<script>
document.querySelectorAll('.butt, .test').forEach(_ => {
	_.addEventListener('click', _ => {
		const o = _.target
		if (o.classList.contains('test')) {
			if (!o.classList.contains('on')) o.classList.add('on')
			return
		}
		if (!o.parentNode.classList.contains('on')) o.parentNode.classList.add('on')
		})
})
</script>

Alexander3928 11.12.2021 21:11

Вложений: 1
рони,
<a href="#" class="works__row-image">
        <div class="works__hover">
            <div class="works__hover-text"></div>
            <div class="works__hover-text"></div>
        </div>
        <img src="../src/IMG/worksImages/image_1.jpg" class="works__image">
    </a>


.works__row-image {
display: block;
    transition: 0.3s;
    position: relative;
    margin: 15px;
}
.works__hover {
 transition: 0.3s;
    position: absolute;
    width: 100%;
    height: 100%;
    background-color: var(--color_8);
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    opacity: 0;
}


и вот как делал я

const children = document.querySelector(".works__hover")
    children.addEventListener("click", () => {
      children.parentNode.classList.toggle("active")
    });


По картинке видно что класс добовляется works__hover, а мне нужно на works__row-image ,когда я кликаю по элементу works__hover

рони 11.12.2021 21:33

Alexander3928,
document.addEventListener("DOMContentLoaded", function() {
            const parent = document.querySelector(".works__row-image")
            parent.addEventListener("click", function(event) {
                event.preventDefault();
                if (event.target.closest(".works__hover")) parent.classList.add("active");
            });
        });


Часовой пояс GMT +3, время: 23:17.