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

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

05.10.2019, 13:05. Показов 6044. Ответов 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
2036 / 1095 / 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
Ответ Создать тему
Новые блоги и статьи
Создаем микросервисы с Go и Kubernetes
golander 02.07.2025
Когда я только начинал с микросервисами, все спорили о том, какой язык юзать. Сейчас Go (или Golang) фактически захватил эту нишу. И вот почему этот язык настолько заходит для этих задач: . . .
C++23, квантовые вычисления и взаимодействие с Q#
bytestream 02.07.2025
Я всегда с некоторым скептицизмом относился к громким заявлениям о революциях в IT, но квантовые вычисления - это тот случай, когда революция действительно происходит прямо у нас на глазах. Последние. . .
Вот в чем сила LM.
Hrethgir 02.07.2025
как на английском будет “обслуживание“ Слово «обслуживание» на английском языке может переводиться несколькими способами в зависимости от контекста: * **Service** — самый распространённый. . .
Использование Keycloak со Spring Boot и интеграция Identity Provider
Javaican 01.07.2025
Два года назад я получил задачу, которая сначала показалась тривиальной: интегрировать корпоративную аутентификацию в микросервисную архитектуру. На тот момент у нас было семь Spring Boot приложений,. . .
Содержание темы с примерами на WebGL
8Observer8 01.07.2025
Все примеры из книги Мацуды и Ли в песочнице JSFiddle Пример выводит точку красного цвета размером 10 пикселей на WebGL 1. 0 и 2. 0 WebGL 1. 0. Передача координаты точки из главной программы в. . .
Основы WebGL. Простой треугольник
8Observer8 01.07.2025
Простой треугольник без трансформаций. Для трансформаций можно использовать glMatrix, как в примере: https:/ / plnkr. co/ edit/ qT6ZTwvncLPRamK5?preview На русском: . . .
Полиглотные микросервисы на C# и .NET
ArchitectMsa 30.06.2025
Полиглотная архитектура появилась не из желания усложнить жизнь разработчикам. Она родилась из практической необходимости решать разные задачи наиболее эффективным способом. В одном из проектов. . .
Стратегии кеширования
Javaican 29.06.2025
Кеширование — это хранение часто запрашиваемых данных в быстром хранилище (обычно в памяти), чтобы не обращаться к более медленному первоисточнику. Казалось бы, все просто. Но за этой простотой. . .
Наблюдаемость приложений ASP.NET Core с OpenTelemetry, Prometheus и Grafana
ArchitectMsa 29.06.2025
Наблюдаемость (observability) – это ключевое свойство современной системы, позволяющее понимать её внутреннее состояние на основе внешних данных. Если мониторинг отвечает на вопрос "что случилось?",. . .
Четыре главных модели отношений классов в с++
russiannick 28.06.2025
Продолжаю крестовый поход против c++. ideone. com/ юзаю для проверки валидности кода. Насчитал 4 модели отношений классов: одиночный класс, равноправные классы, слейв - мастер, терминатор. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »