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

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

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

Студворк — интернет-сервис помощи студентам
Всем привет, помогите пожалуйста зделать скрипт, чтобы при клике на блоке с классом .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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2019, 13:05
Ответы с готовыми решениями:

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

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

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

5
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
05.10.2019, 13:26
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
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
05.10.2019, 14:40
Цитата Сообщение от 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
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
05.10.2019, 18:26
Если острое желание написать скрипт в синтаксисе 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
Цитата Сообщение от skapunker Посмотреть сообщение
Обратите внимание, что блок на который нужно нажать находится внутри блока у которого нужно поменять класс.
amr-now, интересно, говоря внутри ТС имел ввиду один уровень вложенности или несколько.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
05.10.2019, 18:45
shvyrevvg, и единственный подходящий блок или коллекция таких блоков.
Большинство вопросов на этом форуме очень размытые.

Имхо, самое простое считать - структура блоков одинаковая.
Матрёшки с произвольной структурой, имхо, описывать надо специально и очень подробно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.10.2019, 18:45
Помогаю со студенческими работами здесь

Смещение внутри блока, другого блока, без изменения первого
Возможно ли такое? Есть блоки &lt;ul id=&quot;navigation&quot;&gt; &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;div id=&quot;line_fx&quot;&gt;&lt;/div&gt; Домой&lt;/a&gt;&lt;/li&gt; ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru