Bliss.js — это легковесная библиотека для работы с DOM, ориентированная на удобство манипуляций с элементами страницы, событиями и атрибутами. Одной из ключевых концепций, лежащих в основе Bliss.js, является делегирование событий, которое позволяет эффективно управлять большим числом элементов без необходимости навешивать обработчик на каждый из них отдельно.
Делегирование событий строится на механизме всплытия событий в DOM. Когда событие срабатывает на дочернем элементе, оно поднимается вверх по дереву DOM к родительским элементам. Bliss.js использует этот принцип для упрощения обработки событий:
$('.list').on('click', 'li', function() {
console.log('Нажат элемент списка:', this.textContent);
});
В этом примере обработчик добавляется к родительскому элементу
.list, но срабатывает только при клике на дочерний элемент
li. Преимущества такого подхода:
onМетод on в Bliss.js имеет несколько форматов:
element.on(event, selector, handler)
element.on(event, handler)
'click', 'input', 'mouseover' и
т. д.).Пример делегирования для нескольких событий:
$('.table').on('mouseenter mouseleave', 'tr', function(e) {
this.classList.toggle('highlight', e.type === 'mouseenter');
});
Метод автоматически разбирает несколько событий через пробел и
применяет один обработчик к каждому событию, сохраняя контекст
this для конкретного элемента, на котором произошло
событие.
Bliss.js позволяет фильтровать события с помощью селекторов, что делает делегирование гибким. Селектор может быть простым классом, тегом или сложным CSS-выражением:
$('#menu').on('click', 'li.active a', function() {
console.log('Активная ссылка меню:', this.href);
});
В этом случае обработчик сработает только для элементов
<a>, находящихся внутри <li> с
классом .active. Это повышает точность
делегирования и снижает вероятность лишних вызовов.
thisВ обработчике события this всегда указывает на
элемент, который соответствует селектору, а не на
родителя, к которому прикреплен обработчик:
$('#container').on('click', '.button', function() {
console.log('Клик по кнопке:', this.textContent);
});
Даже если кнопка была добавлена динамически после инициализации,
this корректно ссылается на нее. Bliss.js автоматически
обрабатывает привязку контекста, избавляя от необходимости использовать
bind или стрелочные функции.
Метод off позволяет удалять делегированные обработчики
аналогично on:
$('#list').off('click', 'li');
Это убирает все обработчики клика для дочерних элементов
li, привязанных через делегирование. Если селектор не
указан, будут удалены все обработчики события для родителя.
Bliss.js поддерживает делегирование нескольких событий одновременно с использованием строки, где события разделяются пробелами:
$('#form').on('focus blur', 'input', function(e) {
console.log(`${e.type} на поле ${this.name}`);
});
Такой подход позволяет уменьшить дублирование кода и держать обработку событий компактной и централизованной.
Делегирование событий в Bliss.js является фундаментальной концепцией для эффективного взаимодействия с DOM. Оно упрощает управление динамическими элементами, повышает производительность и делает код более структурированным и поддерживаемым.