Библиотека Cash — это лёгкая альтернатива jQuery, ориентированная на работу с DOM и коллекциями элементов. Помимо манипуляций с элементами страницы, она предоставляет удобные методы для работы с массивоподобными объектами, особенно коллекциями DOM-элементов.
Для начала необходимо получить коллекцию элементов с помощью селектора:
const items = $('.item'); // коллекция элементов с классом item
Коллекция items ведёт себя как массивоподобный объект,
что позволяет применять к ней методы перебора и фильтрации.
Метод .each() позволяет итерировать коллекцию:
items.each((index, element) => {
console.log(index, element);
});
index — порядковый номер элемента в коллекции.element — DOM-узел, к которому можно применять
стандартные свойства и методы.Метод поддерживает прерывание итерации, если функция возвращает
false:
items.each((i, el) => {
if (i === 2) return false; // остановка перебора после третьего элемента
});
Коллекция Cash поддерживает доступ по индексу, аналогично массиву:
const firstItem = items[0]; // первый элемент
const lastItem = items[items.length - 1]; // последний элемент
Можно использовать метод .get(index) для получения
элемента:
const thirdItem = items.get(2);
Если не передавать аргумент, .get() возвращает массив
всех элементов:
const allItems = items.get(); // полноценный массив DOM-элементов
Метод .filter() позволяет отобрать элементы по
условию:
const visibleItems = items.filter((index, element) => element.offsetParent !== null);
Можно передавать CSS-селектор, чтобы оставить только подходящие элементы:
const activeItems = items.filter('.active');
Для исключения элементов используется метод .not():
const inactiveItems = items.not('.active');
Метод .find() ищет потомков внутри каждого элемента
коллекции:
const nestedElements = items.find('span');
items.find('span').filter('.highlight').each((i, el) => console.log(el));
Метод .map() позволяет создавать новые массивы на основе
коллекции:
const itemTexts = items.map((i, el) => el.textContent).get();
.get().Методы .add() и .addBack() расширяют
коллекцию:
const moreItems = $('.extra');
const combined = items.add(moreItems); // объединение коллекций
.addBack() возвращает предыдущую коллекцию после
.find() или .filter():
items.find('span').addBack(); // возвращает спаны + исходные элементы
Метод .slice() позволяет работать с частями коллекции,
аналогично массивам:
const middleItems = items.slice(1, 3); // элементы со 2-го по 3-й
Метод .is() проверяет соответствие элементов селектору
или условию:
if (items.is('.active')) {
console.log('Есть активные элементы');
}
Метод .has() проверяет наличие потомков внутри элементов
коллекции:
if (items.has('span')) {
console.log('Есть спаны внутри элементов');
}
Для интеграции с чистым JavaScript часто требуется массив. Методы
.get() и Array.from() позволяют это
сделать:
const array = items.get(); // через Cash
const array2 = Array.from(items); // стандартный JS
После этого можно применять любые методы массива, например
.reduce(), .sort() или
.forEach().
Комбинирование методов позволяет строить сложные цепочки:
const texts = $('.item')
.filter(':visible')
.find('span')
.map((i, el) => el.textContent)
.get();
Методы работы с массивоподобными коллекциями в Cash обеспечивают гибкость и лаконичность кода, упрощая перебор, фильтрацию и преобразование DOM-элементов в привычные массивы.