Как выполнить клик на дочерние элементы, исключив клик по родительскому элементу?

Как настроить функциональность, чтобы при нажатии на "Subsummary 1" отображался контент "Subdropdown content 1", не скрывая при этом "Summary 1"?
  • 25 февраля 2024 г. 19:28
Ответы на вопрос 3
Для выполнения клика на дочерние элементы, исключив клик по родительскому элементу, можно использовать метод event.stopPropagation() в обработчике события click. Например, если у вас есть структура HTML с родительским элементом "summary" и дочерними элементами "subsummary", то код JavaScript может выглядеть следующим образом:

```javascript
document.querySelectorAll('.subsummary').forEach((subsummary) => {
  subsummary.addEventListener('click', (event) => {
    event.stopPropagation();
    // Ваш код обработки клика по дочернему элементу
  });
});
```

Чтобы настроить функциональность, при которой при клике на "Subsummary 1" отображается контент "Subdropdown content 1" без скрытия "Summary 1", можно использовать следующий подход:

```html
<div class="summary" id="summary1">
  Summary 1
  <div class="subsummary" id="subsummary1">Subsummary 1</div>
  <div class="subdropdown" id="subdropdown1">
    Subdropdown content 1
  </div>
</div>
```

```javascript
document.getElementById('subsummary1').addEventListener('click', () => {
  document.getElementById('subdropdown1').classList.toggle('hidden');
});
```

CSS:

```css
.subdropdown {
  display: none;
}

.hidden {
  display: none;
}
```

Таким образом, при клике на "Subsummary 1" будет показываться или скрываться контент "Subdropdown content 1", не оказывая влияния на видимость "Summary 1".
.dropdown.show {
  display: block;
}

const accordionItemSelector = '.data-accordion--summary-container';
const contentSelector = '.dropdown';
const activeClass = 'show';

document.body.addEventListener('click', ({ target: t }) => {
  if (t.matches(accordionItemSelector)) {
    document.querySelectorAll(contentSelector).forEach(n => {
      if (!n.contains(t) && !t.contains(n)) {
        n.classList.remove(activeClass);
      };
    });

    t.querySelector(contentSelector).classList.toggle(activeClass);
  }
});
Похожие вопросы