Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
29 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,374
1

Как сменить класс блока при клике на элемент внутри этого блока?

05.10.2019, 13:05. Показов 5553. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, помогите пожалуйста зделать скрипт, чтобы при клике на блоке с классом .wo-reaction у блока с классом .panel менялся класс на .myhide. Обратите внимание, что блок на который нужно нажать находится внутри блока у которого нужно поменять класс.

Деалют так, не фурычит.

Javascript
1
2
3
document.querySelector('div[class="wo-reaction"]').addEventListener("click", function(){
  document.querySelector('div[class="panel"]').setAttribute('class', 'myhide');
})
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2019, 13:05
Ответы с готовыми решениями:

Как запретить выделение блока при двойном клике
делаю что-то похожее на слайдер, где с двух сторон есть кнопки-стрелки, при нажатии на которые...

В центре каждого блока матрицы размером 3х3 поместить сумму других элементов этого же блока
Заполнить матрицу случайными числами. Разбить матрицу на квадраты размера 3х3. В центре каждого...

Внутри родительского блока сделать отступ дочернего блока сверху автоматически
Здравствуйте, как с помощью css внутри родительского блока сделать отступ дочернего блока сверху...

Смещение внутри блока, другого блока, без изменения первого
Возможно ли такое? Есть блоки <ul id="navigation"> <li><a href="#"><div...

5
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
05.10.2019, 13:26 2
skapunker, можно так
Javascript
1
2
3
4
5
6
7
8
      const el = document.querySelector(".wo-reaction");
      el.addEventListener("click", () => {
        const panel = el.closest(".panel");
        if (panel) {
          panel.classList.remove("panel");
          panel.classList.add("myhide");
        }
      });
можно через делегирование
Javascript
1
2
3
4
5
6
7
      const el = document.querySelector(".panel");
      el.addEventListener("click", e => {
        if (e.target.classList.contains("wo-reaction")) {
          el.classList.remove("panel");
          el.classList.add("myhide");
        }
      });
0
Эксперт JS
2034 / 1093 / 408
Регистрация: 29.04.2016
Сообщений: 2,612
05.10.2019, 14:40 3
Цитата Сообщение от skapunker Посмотреть сообщение
менялся класс
Если нужно именно заменить класс -> https://codepen.io/Mr_Sergo/pen/RwwwoYa
HTML5
1
2
3
4
<div class="panel">
    panel
    <div class="wo-reaction">wo-reaction</div>
</div>
Javascript
1
2
3
4
let panel = document.querySelector('.panel');
document.querySelector('.wo-reaction').addEventListener('click',e => {
    panel.className = 'myhide';
});
Если нужно при каждом клике добавить/удалить класс -> https://codepen.io/Mr_Sergo/pen/JjjjbQP
Javascript
1
2
3
4
let panel = document.querySelector('.panel');
document.querySelector('.wo-reaction').addEventListener('click',e => {
    panel.classList.toggle('myhide');
});
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
05.10.2019, 18:26 4
Если острое желание написать скрипт в синтаксисе ES5 для совместимости с Internet Explorer 11 и телефонами пятилетней давности, то вот хорошая заготовка:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <div class="panel">
        Снаружи1
        <div class="wo-reaction">
            Внутри
        </div>
    </div>
    <div class="panel">
        Снаружи2
        <div class="wo-reaction">
            Внутри
        </div>
    </div>
    <script>
        var nodes = document.querySelectorAll("div div.wo-reaction");
        for (var i = 0; i < nodes.length; i++)
            nodes[i].onclick = woreaction_click;
 
        function woreaction_click() {
            var cl = this.parentElement.classList;
            // Для современных браузеров
            // cl.replace("panel", "myhide");
 
            // Для Internet Explorer 11
            cl.remove("panel");
            cl.add("myhide");
        }
    </script>
</body>
</html>
Обработчик можно навесить на единственный HTML-элемент, а можно на коллекцию. По вкусу.

Имхо, скрипт должен быть максимально простым и допускающий возможность быстрой и удобной доделки.
Отдельную функцию очень легко доделать.
1
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
05.10.2019, 18:41 5
Цитата Сообщение от skapunker Посмотреть сообщение
Обратите внимание, что блок на который нужно нажать находится внутри блока у которого нужно поменять класс.
amr-now, интересно, говоря внутри ТС имел ввиду один уровень вложенности или несколько.
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
05.10.2019, 18:45 6
shvyrevvg, и единственный подходящий блок или коллекция таких блоков.
Большинство вопросов на этом форуме очень размытые.

Имхо, самое простое считать - структура блоков одинаковая.
Матрёшки с произвольной структурой, имхо, описывать надо специально и очень подробно.
0
05.10.2019, 18:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2019, 18:45
Помогаю со студенческими работами здесь

Как сделать, чтобы два блока сменяли друг друга при клике?
Здравствуйте. Помогите, пожалуйста решить проблему. Нужно, чтобы при нажатии на кнопку, один блок...

Как сделать 2 перекрывающих себя блока, одновременно активными при клике пользователя?
Как сделать 2 перекрывающих себя блока, одновременно активными при клике пользователя? Допустим...

Выравнивание блока footer внутри другого блока
Подскажите пожалуйста, как убрать разрыв между блоком Footer и div'ом cont. &lt;article&gt; &lt;div...

Замена блока при клике
Хочу сделать как в диалогах вконтакте, где нажимаешь на сообщение, и один блок сменяется другим в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru