Tooltipster позволяет создавать динамические и интерактивные подсказки, которые могут содержать любые элементы HTML. В сложных интерфейсах часто возникает необходимость отображать вложенные тултипы — подсказки, находящиеся внутри другой подсказки. Это полезно для демонстрации дополнительной информации без перегрузки основного интерфейса.
В Tooltipster вложенные тултипы реализуются с помощью стандартных и кастомных событий, а также правильной инициализации дочерних тултипов после рендеринга родительского.
Родительский тултип создается стандартным методом
.tooltipster(). Ключевой момент — указание контента как
HTML, чтобы внутри подсказки можно было размещать элементы для вложенных
тултипов:
$('#parent').tooltipster({
content: $('<div class="parent-content">Основная подсказка<div class="child-target">Детали</div></div>'),
theme: 'tooltipster-light',
interactive: true,
trigger: 'click',
side: 'bottom'
});
Объяснение параметров:
interactive: true — позволяет взаимодействовать с
содержимым тултипа без его закрытия при клике.trigger: 'click' — открывает тултип по клику, что
особенно удобно для вложенных элементов.content может быть как строкой, так и jQuery-элементом,
что дает гибкость для вставки вложенных структур.Для вложенного тултипа необходимо инициализировать его после того,
как родительский тултип полностью отображен. Tooltipster предоставляет
событие ready, которое идеально подходит для этой
задачи:
$('#parent').on('tooltipster-ready', function(event) {
$('.child-target').tooltipster({
content: 'Дополнительная информация',
theme: 'tooltipster-noir',
interactive: true,
trigger: 'hover',
side: 'right'
});
});
Здесь важно учитывать:
ready родителя — гарантирует, что элемент уже
присутствует в DOM.Вложенные тултипы требуют точного контроля событий show
и hide. Tooltipster предоставляет методы
open() и close(), а также события:
tooltipster-showtooltipster-hideПример программного управления:
$('#parent').on('tooltipster-show', function() {
console.log('Родительский тултип открыт');
});
$('.child-target').on('tooltipster-show', function() {
console.log('Вложенный тултип открыт');
});
Это позволяет синхронизировать поведение: например, автоматически закрывать вложенный тултип при закрытии родительского.
$('#parent').on('tooltipster-hide', function() {
$('.child-target').tooltipster('close');
});
Если содержимое родительского тултипа создается динамически (например, через AJAX), вложенные тултипы нужно инициализировать после вставки контента:
$('#parent').tooltipster({
content: 'Загрузка...',
interactive: true,
trigger: 'click'
});
$('#parent').on('tooltipster-ready', function() {
$.ajax({
url: '/get-content',
success: function(data) {
$('#parent').tooltipster('content', $(data));
// Инициализация вложенных тултипов в новом контенте
$('.child-target').tooltipster({
content: 'Детали после загрузки',
theme: 'tooltipster-noir',
interactive: true
});
}
});
});
Таким образом, вложенные подсказки всегда корректно создаются после того, как родительский тултип полностью сформирован.
Tooltipster позволяет задавать разные стороны отображения для родительского и вложенного тултипов:
$('#parent').tooltipster({ side: 'bottom' });
$('.child-target').tooltipster({ side: 'right' });
Использование параметра functionPosition позволяет
динамически изменять позицию, чтобы вложенный тултип не выходил за
границы окна:
$('.child-target').tooltipster({
functionPosition: function(instance, helper, position){
if(position.coord.top + position.size.height > $(window).height()){
position.coord.top = $(window).height() - position.size.height - 10;
}
return position;
}
});
interactive: true для тултипов,
которые содержат вложенные элементы.click для родителя, hover
для вложенного) помогают избежать случайного закрытия.tooltipster-ready).show и hide позволяет
синхронизировать открытие и закрытие всех уровней подсказок.Эта структура позволяет создавать многоуровневые интерактивные подсказки с полной поддержкой динамического контента, точного позиционирования и управления событиями, что особенно важно для сложных интерфейсов и админ-панелей.