В библиотеке Tooltipster управление группой тултипов строится вокруг синхронизации поведения нескольких экземпляров. Это позволяет контролировать их открытие, закрытие, состояние и взаимодействие как единой системы. Подобный подход востребован при создании сложных интерфейсов: таблиц с подсказками, интерактивных схем, форм с валидацией и интерфейсов с множественными подсказками.
Группа тултипов — это логическое объединение нескольких элементов, к которым применён Tooltipster, с возможностью централизованного управления.
Создание группы начинается с инициализации Tooltipster на наборе элементов:
$('.tooltip').tooltipster({
theme: 'tooltipster-default',
animation: 'fade',
delay: 200
});
Все элементы с классом .tooltip становятся частью
потенциальной группы. Однако сама по себе инициализация не создаёт
связей между ними — для этого используется дополнительная логика.
Простейший способ управления группой — работа через общий селектор:
$('.tooltip').tooltipster('open');
Открытие всех тултипов:
$('.tooltip').tooltipster('close');
Закрытие всех тултипов.
Для более гибкого контроля используется разделение тултипов на группы через разные селекторы или атрибуты:
<span class="tooltip group-a" title="Подсказка A1"></span>
<span class="tooltip group-a" title="Подсказка A2"></span>
<span class="tooltip group-b" title="Подсказка B1"></span>
Инициализация:
$('.group-a').tooltipster();
$('.group-b').tooltipster();
Управление группами:
$('.group-a').tooltipster('open');
$('.group-b').tooltipster('close');
Один из ключевых сценариев — закрытие всех тултипов при открытии нового.
$('.tooltip').tooltipster({
functionBefore: function(instance, helper) {
$('.tooltip').not(helper.origin).tooltipster('close');
}
});
functionBefore вызывается перед открытием тултипаhelper.origin — текущий элементTooltipster предоставляет доступ к экземплярам тултипов:
var instances = $.tooltipster.instances();
Каждый экземпляр — объект с методами управления.
$.each(instances, function(i, instance) {
instance.close();
});
Можно управлять только частью тултипов:
$.each($.tooltipster.instances(), function(i, instance) {
if ($(instance.elementOrigin()).hasClass('group-a')) {
instance.open();
}
});
Каждая группа может иметь собственные настройки:
$('.group-a').tooltipster({
animation: 'grow',
delay: 100
});
$('.group-b').tooltipster({
animation: 'fade',
delay: 300
});
Частая задача — разрешить только один открытый тултип в группе.
$('.tooltip').tooltipster({
functionBefore: function(instance, helper) {
$.each($.tooltipster.instances(), function(i, inst) {
if (inst !== instance) {
inst.close();
}
});
}
});
Можно настроить зависимости между группами:
$('.group-a').tooltipster({
functionBefore: function() {
$('.group-b').tooltipster('close');
}
});
Можно использовать кастомные события для управления группами:
$(document).on('open-group-a', function() {
$('.group-a').tooltipster('open');
});
$(document).on('close-all-tooltips', function() {
$('.tooltip').tooltipster('close');
});
Вызов:
$(document).trigger('open-group-a');
Если элементы добавляются после инициализации:
var newElement = $('<span class="tooltip group-a" title="Новая подсказка"></span>');
$('body').append(newElement);
newElement.tooltipster();
Для включения в группу важно:
При загрузке данных с сервера можно формировать группы на лету:
$.ajax({
url: '/data',
success: function(data) {
data.forEach(function(item) {
var el = $('<span class="tooltip group-a"></span>');
el.attr('title', item.text);
$('body').append(el);
el.tooltipster();
});
}
});
При большом количестве тултипов важно учитывать:
var group = $('.group-a');
group.tooltipster('close');
вместо:
$.each($.tooltipster.instances(), function(i, inst) {
inst.close();
});
Иногда требуется отслеживать состояние группы:
var openTooltips = [];
$('.tooltip').tooltipster({
functionReady: function(instance) {
openTooltips.push(instance);
},
functionAfter: function(instance) {
openTooltips = openTooltips.filter(i => i !== instance);
}
});
Группы тултипов часто управляются через элементы интерфейса:
$('#open-all').on('click', function() {
$('.tooltip').tooltipster('open');
});
$('#close-all').on('click', function() {
$('.tooltip').tooltipster('close');
});
$('.tooltip').each(function(index) {
var el = $(this);
setTimeout(function() {
el.tooltipster('open');
}, index * 200);
});
$('.tooltip').tooltipster({
functionBefore: function(instance, helper) {
if ($(helper.origin).data('enabled') === false) {
return false;
}
}
});
1. Повторная инициализация
$('.tooltip').tooltipster();
$('.tooltip').tooltipster(); // ошибка
2. Потеря ссылок на экземпляры
Важно не терять доступ к instance при сложной логике.
3. Некорректная фильтрация
Использование неправильных селекторов может привести к управлению лишними элементами.
Групповое управление позволяет превратить набор независимых тултипов в управляемую систему с предсказуемым поведением и высокой гибкостью.