Tippy.js является мощной библиотекой для создания всплывающих
подсказок и тултипов в JavaScript, и одним из ключевых аспектов её
работы является корректная идентификация элементов, к которым эти
тултипы будут привязаны. В Tippy.js селекторы целевых элементов задаются
через аргумент target при инициализации, что позволяет
гибко управлять интерфейсом и создавать сложные интерактивные
взаимодействия.
Наиболее распространённый способ привязки тултипа — через CSS-селекторы. Это может быть класс, идентификатор или любой другой валидный селектор.
tippy('.tooltip', {
content: 'Пример тултипа',
});
В этом примере тултип будет применён ко всем элементам с классом
tooltip. Tippy.js поддерживает любые селекторы, которые
можно использовать в querySelectorAll, включая:
.button#submit[data-tooltip]ul li:first-childОсобенности: Tippy.js автоматически перебирает все элементы, соответствующие селектору, и инициализирует тултип для каждого.
Вместо селекторов можно передавать DOM-элементы или NodeList напрямую. Это полезно, когда элементы уже получены в коде:
const buttons = document.querySelectorAll('.button');
tippy(buttons, {
content: 'Кнопка с тултипом',
});
Tippy.js корректно обработает любой объект типа HTMLElement или коллекцию NodeList.
delegateКогда элементы динамически добавляются в DOM после инициализации
страницы, стандартное указание селектора не срабатывает. Для таких
случаев используется опция delegate, которая позволяет
навесить один тултип на родительский элемент и распространять его на
дочерние элементы:
tippy(document.body, {
content: 'Динамический тултип',
delegate: '.dynamic-tooltip',
});
Пояснение работы:
delegate задаёт дочерний селектор внутри родителя, на
котором создаётся слушатель событий.Если целевые элементы находятся внутри сложной структуры DOM, важно использовать точные селекторы, чтобы избежать конфликтов и ненужных обработок:
tippy('#menu li[data-tooltip]', {
content: 'Пункт меню',
});
document.body может быть
избыточным).Помимо привязки через селектор, Tippy.js позволяет использовать атрибуты HTML для указания содержимого тултипа, что облегчает работу с динамическими данными:
<button class="tooltip" data-tippy-content="Привет!">Кнопка</button>
tippy('.tooltip');
data-tippy-content.На практике часто применяется сочетание методов:
data-tippy-content используются для хранения
содержимого тултипа непосредственно в HTML.Пример комплексного подхода:
// Статические кнопки
tippy('.static-button');
// Динамические кнопки через делегирование
tippy(document.querySelector('#container'), {
delegate: '.dynamic-button',
});
Эффективная работа с селекторами позволяет строить интерфейсы с гибкой и динамической визуализацией подсказок, минимизируя дублирование кода и обеспечивая корректное поведение даже при сложной структуре DOM.