Библиотека Muuri предоставляет набор методов для получения элементов
сетки (Grid) в различных состояниях. Эти методы позволяют извлекать
элементы по индексу, по состоянию видимости, активности, сортировки,
фильтрации, а также получать конкретные экземпляры объектов
Item. Управление элементами сетки является ключевой частью
динамических интерфейсов, где требуется программный доступ к содержимому
Grid.
Каждый элемент в Muuri представлен объектом Muuri.Item,
который содержит ссылку на DOM-элемент и внутренние данные, необходимые
для управления позицией, состоянием и поведением элемента внутри
сетки.
getItems()Основной способ получения элементов из сетки — использование метода
getItems(). Этот метод возвращает массив объектов
Item.
var items = grid.getItems();
Возвращаемое значение:
Array<Muuri.Item>
Каждый объект в массиве содержит методы и свойства для работы с соответствующим элементом сетки.
var items = grid.getItems();
items.forEach(function(item) {
console.log(item.getElement());
});
Метод getElement() возвращает DOM-узел элемента.
Метод getItems() принимает аргументы, позволяющие
извлекать элементы по индексам.
var firstItem = grid.getItems(0);
Также допускается получение нескольких элементов:
var items = grid.getItems([0, 2, 5]);
Muuri автоматически возвращает массив объектов Item,
соответствующих указанным индексам.
var items = grid.getItems([1, 3]);
items.forEach(function(item) {
console.log(item.getElement().textContent);
});
Метод getItems() поддерживает получение элементов через
ссылку на DOM-узел.
var element = document.querySelector('.item');
var item = grid.getItems(element);
Muuri сопоставляет DOM-узел с соответствующим объектом
Item.
var elements = document.querySelectorAll('.item');
var items = grid.getItems(elements);
Это позволяет легко связать работу библиотеки с существующей разметкой.
ItemЕсли уже имеется экземпляр Item, его можно повторно
получить через getItems().
var items = grid.getItems(itemInstance);
Метод возвращает массив, содержащий тот же объект.
Muuri позволяет получать элементы, используя CSS-селектор.
var items = grid.getItems('.active');
Muuri сопоставляет селектор с DOM-элементами внутри Grid и возвращает
соответствующие Item.
Активными считаются элементы, участвующие в текущем расположении сетки.
Получение активных элементов:
var activeItems = grid.getItems().filter(function(item) {
return item.isActive();
});
Метод isActive() проверяет, участвует ли элемент в
текущей раскладке.
Неактивные элементы — это элементы, временно исключённые из раскладки (например, при фильтрации).
var inactiveItems = grid.getItems().filter(function(item) {
return !item.isActive();
});
Muuri поддерживает управление видимостью элементов через методы
show() и hide().
Проверка состояния осуществляется методом
isVisible().
var visibleItems = grid.getItems().filter(function(item) {
return item.isVisible();
});
var hiddenItems = grid.getItems().filter(function(item) {
return !item.isVisible();
});
Такая операция полезна при динамическом управлении фильтрацией или анимацией элементов.
После применения метода sort() порядок элементов в Grid
изменяется. Метод getItems() возвращает элементы в текущем
порядке расположения.
grid.sort(function(a, b) {
return a.getElement().dataset.id - b.getElement().dataset.id;
});
var items = grid.getItems();
Полученный массив соответствует текущему порядку элементов в сетке.
var firstItem = grid.getItems()[0];
Поскольку getItems() возвращает массив, можно
использовать стандартные методы работы с массивами.
var items = grid.getItems();
var lastItem = items[items.length - 1];
ItemКаждый объект Item предоставляет метод:
item.getElement();
Пример:
var items = grid.getItems();
items.forEach(function(item) {
var element = item.getElement();
console.log(element);
});
Это позволяет работать с DOM напрямую, например изменять стили или содержимое.
Для определения позиции элемента используется метод
getItems() вместе с индексом массива.
var items = grid.getItems();
var index = items.indexOf(item);
Индекс соответствует позиции элемента в текущем порядке Grid.
Количество элементов определяется длиной массива.
var count = grid.getItems().length;
console.log(count);
Это значение включает как активные, так и неактивные элементы.
После применения метода filter() часть элементов
становится неактивной.
grid.filter('.visible');
Получение активных элементов:
var items = grid.getItems().filter(function(item) {
return item.isActive();
});
Получение скрытых:
var items = grid.getItems().filter(function(item) {
return !item.isActive();
});
getItems() в цепочках операцийПолученные элементы можно использовать для выполнения различных операций.
Пример изменения стилей:
grid.getItems().forEach(function(item) {
item.getElement().style.background = 'red';
});
Пример добавления классов:
grid.getItems().forEach(function(item) {
item.getElement().classList.add('processed');
});
Для работы с DOM-элементами можно преобразовать массив
Item в массив элементов.
var elements = grid.getItems().map(function(item) {
return item.getElement();
});
Теперь elements содержит обычные DOM-узлы.
Многие методы Muuri принимают массив объектов Item.
Например, перемещение элементов:
var items = grid.getItems([0, 1]);
grid.move(items, 5);
var items = grid.getItems([2, 3]);
grid.remove(items);
Muuri принимает массив объектов Item, поэтому
getItems() используется для подготовки данных.
var element = document.querySelector('.item');
var items = grid.getItems(element);
if (items.length) {
console.log('Элемент присутствует в сетке');
}
Если элемент не принадлежит Grid, возвращается пустой массив.
Метод getItems() часто применяется для выполнения
массовых операций:
Пример:
grid.getItems().forEach(function(item) {
var el = item.getElement();
el.dataset.processed = true;
});
Ключевые характеристики getItems():
1. Всегда возвращает массив
Даже если запрошен один элемент:
var item = grid.getItems(0);
Результат:
[Item]
2. Поддерживает разные типы аргументов
Item3. Возвращает элементы в текущем порядке Grid
Порядок массива соответствует текущему расположению элементов после сортировки, фильтрации и перемещения.
var grid = new Muuri('.grid');
var items = grid.getItems();
items.forEach(function(item) {
var element = item.getElement();
var title = element.querySelector('.title');
if (title) {
console.log(title.textContent);
}
});
В этом примере:
Полученные объекты Item могут использоваться для:
Таким образом, метод getItems() является центральным
механизмом доступа к элементам Muuri Grid и служит основой для
большинства программных операций с сеткой.