В библиотеке Gridstack.js управление элементами сетки не ограничивается только их созданием и перемещением. Одной из ключевых возможностей является программное удаление виджетов, что особенно важно при динамическом формировании интерфейсов и обновлении содержимого.
Gridstack предоставляет несколько способов удаления виджетов:
removeWidget(el, removeDOM = true, triggerEvent = true)
Основной метод для удаления виджетов. Параметры:
el – DOM-элемент или jQuery-объект, представляющий
виджет.removeDOM (по умолчанию true) –
определяет, будет ли удалён элемент из DOM. Если false,
виджет останется в DOM, но будет удалён из внутренней структуры
Gridstack.triggerEvent (по умолчанию true) –
определяет, будет ли инициировано событие removed.Пример использования:
const grid = GridStack.init();
const widget = document.querySelector('.grid-stack-item[data-gs-id="1"]');
grid.removeWidget(widget);
В этом примере виджет с атрибутом data-gs-id="1"
полностью удаляется из сетки и DOM.
Удаление всех виджетов одновременно –
removeAll() Метод удаляет все виджеты из сетки.
Параметр removeDOM работает аналогично
removeWidget.
const grid = GridStack.init();
grid.removeAll(); // удаляет все виджеты и очищает DOMУдаление без событий – removeWidget с
triggerEvent = false Иногда требуется удалить
элемент без генерации событий, например, при массовом обновлении
сетки:
grid.removeWidget(widget, true, false);Gridstack поддерживает как чистый JavaScript, так и jQuery. Если используется jQuery:
const $widget = $('.grid-stack-item[data-gs-id="2"]');
grid.removeWidget($widget);
Метод корректно определяет элемент и удаляет его, при этом обновляя внутреннее состояние сетки.
Удаление виджетов инициирует событие
removed, которое можно перехватывать:
grid.on('removed', function(event, items) {
items.forEach(item => console.log('Удалён виджет:', item.el));
});
event – объект событияitems – массив удалённых виджетов с информацией о их
положении и размере (x, y, w,
h)События особенно полезны для синхронизации состояния сетки с сервером или локальным хранилищем.
Если необходимо удалить виджет, но сохранить его данные для
последующего восстановления, рекомендуется использовать
removeWidget с removeDOM = false:
const widget = document.querySelector('.grid-stack-item[data-gs-id="3"]');
grid.removeWidget(widget, false); // виджет остаётся в DOM, но исчезает из сетки
Это позволяет временно скрыть виджет, не теряя его состояния и атрибутов.
Иногда требуется удалить несколько виджетов по определённому условию, например, по классу или типу контента:
const widgets = grid.engine.nodes.filter(node => node.el.classList.contains('removable'));
widgets.forEach(node => grid.removeWidget(node.el));
grid.engine.nodes – массив всех виджетов сетки с
полными данными о положении и размере.После массового удаления рекомендуется вызвать
grid.compact(), чтобы перераспределить
оставшиеся виджеты и устранить пустые промежутки:
grid.removeAll();
grid.compact(); // перераспределение оставшихся виджетов
Это повышает визуальную аккуратность интерфейса и поддерживает корректное поведение сетки при последующих добавлениях виджетов.
removeWidget – удаление отдельного виджета.removeAll – удаление всех виджетов.triggerEvent позволяет контролировать генерацию
событий.removeDOM = false сохраняет элемент в DOM для
последующего восстановления.grid.engine.nodes
предоставляет гибкость при массовых операциях.compact() после удаления оптимизирует
расположение оставшихся элементов.Эти методы позволяют строить динамические интерфейсы с полной программной контролируемостью сетки, обеспечивая как точечное удаление, так и массовые операции.