
Делегирование событий - это мощный паттерн в JavaScript, который позволяет обрабатывать события на родительском элементе, вместо того, чтобы назначать обработчики каждому дочернему элементу по отдельности. Это особенно полезно, когда у вас есть много динамически добавляемых элементов или когда вы хотите оптимизировать производительность. В этом тренажере вы попрактикуетесь в использовании делегирования событий для решения различных задач, от простых до сложных. Вы будете работать с готовым HTML-кодом и дополнять JavaScript-код, чтобы добиться желаемого результата.
- Модуль 1: Основы выбора элементов
- Выбор элемента по ID.
- Выбор элементов по классу.
- Выбор элементов по тегу.
- Выбор по селектору CSS.
- Выбор по атрибуту.
- Поиск элементов внутри другого элемента.
- Поиск родительского элемента.
- Поиск соседних элементов (предыдущий, следующий).
- Поиск первого и последнего дочернего элемента.
- Поиск всех дочерних элементов.
- Модуль 2: Манипуляция содержимым
- Модуль 3: Работа с атрибутами
- Модуль 4: Управление классами
- Модуль 5: Управление стилями
- Модуль 6: Создание и удаление элементов
- Создание нового элемента.
- Вставка элемента перед другим элементом.
- Вставка элемента после другого элемента.
- Добавление элемента в определенную позицию внутри списка дочерних элементов.
- Удаление элемента из DOM.
- Замена одного элемента другим.
- Перемещение существующего элемента в другое место DOM..
- Очистка содержимого элемента без его удаления.
- Модуль 7: Обработка событий
- Модуль 8: Работа с формами
- Модуль 9: Продвинутые манипуляции
- Модуль 10: Работа с размерами и прокруткой
- Получение размеров элемента.
- Получение позиции элемента относительно окна браузера.
- Получение позиции элемента относительно родительского элемента.
- Управление прокруткой страницы.
- Определение, виден ли элемент в текущей области просмотра.
- Плавная прокрутка к элементу.
- Создание элемента, который фиксируется при прокрутке.
- Модуль 11: Работа с медиа-элементами
- Модуль 12: Практические задания
Изменение цвета фона элемента списка
Используйте делегирование событий, чтобы при клике на любой элемент списка `<li>` он менял свой цвет фона на красный. Вам нужно добавить обработчик событий на родительский элемент `<ul>` и определить, на каком именно элементе списка произошло событие.
<ul id="myList">
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</ul>
const list = document.getElementById("myList");
list.addEventListener("click", function(event) {
if (event.target.tagName === input__1) {
event.input__2.style.backgroundColor = input__3;
}
});
Удаление элемента списка
Реализуйте делегирование событий так, чтобы при клике на любой элемент списка `<li>` он удалялся из списка. Используйте метод `remove()` для удаления элемента.
<ul id="myList2">
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</ul>
const list2 = document.getElementById("myList2");
list2.addEventListener(input__1, function(event) {
if (event.target.tagName === "LI") {
event.target.input__2();
}
});
Добавление класса при наведении
Сделайте так, чтобы при наведении курсора мыши на любой элемент списка `<li>` ему добавлялся класс "highlight", а при уходе курсора - класс удалялся. Используйте события `mouseover` и `mouseout`.
.highlight {
background-color: yellow;
}
<ul id="myList3">
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</ul>
const list3 = document.getElementById("myList3");
list3.addEventListener("mouseover", function(event) {
if (event.target.tagName === "LI") {
event.target.classList.input__1("highlight");
}
});
list3.addEventListener(input__2, function(event) {
if (event.target.tagName === "LI") {
event.target.classList.remove(input__3);
}
});
Переключение класса по клику
Реализуйте переключение класса "active" на элементах списка `<li>` при клике. Если класс есть, он должен удаляться, если класса нет - добавляться. Используйте метод `classList.toggle()`.
.active {
font-weight: bold;
}
<ul id="myList4">
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</ul>
const list4 = document.getElementById(input__1);
list4.addEventListener("click", function(event) {
if (event.target.tagName === "LI") {
event.target.classList.input__2("active");
}
});
Обработка кликов на кнопках внутри списка
В каждом элементе списка есть кнопка. При клике на кнопку выведите в консоль текст, содержащийся внутри этой кнопки. Используйте делегирование и `event.target`.
<ul id="myList5">
<li>Элемент 1 <button>Кнопка 1</button></li>
<li>Элемент 2 <button>Кнопка 2</button></li>
<li>Элемент 3 <button>Кнопка 3</button></li>
</ul>
const list5 = document.getElementById("myList5");
list5.addEventListener("click", function(event) {
if (event.target.tagName === input__1) {
console.log(event.target.input__2);
}
});
Изменение картинки по клику
В списке находятся картинки. При клике на картинку, замените ее `src` на другую картинку.
<div id="imageContainer">
<img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image 1">
<img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png" alt="Image 2">
</div>
const container = document.getElementById("imageContainer");
container.addEventListener("click", function(event) {
if (event.target.tagName === "IMG") {
event.target.src = input__1;
}
});
Вложенное делегирование
Внутри списка есть вложенные списки. При клике на элемент вложенного списка, выведите в консоль его текст.
<ul id="outerList">
<li>Внешний элемент 1
<ul class="innerList">
<li>Внутренний элемент 1</li>
<li>Внутренний элемент 2</li>
</ul>
</li>
<li>Внешний элемент 2</li>
</ul>
const outerList = document.getElementById("outerList");
outerList.addEventListener("click", function(event) {
if (event.target.tagName === input__1) {
console.log(event.target.input__2);
}
});
Остановка всплытия события
Добавьте обработчик события клика на контейнер. Внутри контейнера есть кнопка. При клике на кнопку, событие не должно всплывать до контейнера. Выведите в консоль сообщение при клике на кнопку и на контейнер (отдельные сообщения).
<div id="container8">
<button id="myButton8">Нажми меня</button>
</div>
const container8 = document.getElementById('container8');
const button8 = document.getElementById('myButton8');
container8.addEventListener('click', () => {
console.log('Клик по контейнеру');
});
button8.addEventListener('click', (event) => {
input__1;
console.log('Клик по кнопке');
});