Библиотека Cash — это лёгкий и производительный аналог jQuery для работы с DOM в браузере. Одной из ключевых особенностей Cash является возможность использования комбинаторов для точного выбора элементов в дереве документа. Комбинаторы позволяют строить сложные селекторы, опираясь на иерархию элементов и их взаимное расположение.
)Селектор потомков используется для поиска всех элементов внутри заданного контейнера, вне зависимости от их уровня вложенности.
// Получение всех <span> внутри <div>
const spans = cash('div span');
spans.each(el => console.log(el));
Особенности:
'div.content span.highlight'.>)Селектор прямых потомков ограничивает выборку только элементами, которые являются непосредственными детьми указанного контейнера.
// Получение всех <li>, которые являются прямыми потомками <ul>
const items = cash('ul > li');
items.addClass('highlight');
Ключевые моменты:
<li> внутри других
элементов <li>.+)Комбинатор соседних элементов позволяет выбрать элемент, который непосредственно следует за указанным.
// Выбираем первый <p>, следующий за <h2>
const paragraph = cash('h2 + p');
paragraph.css('color', 'blue');
Применение:
~)Селектор общих соседей выбирает все элементы, которые идут после указанного на одном уровне вложенности.
// Все <p> после <h2> в одном контейнере
const paragraphs = cash('h2 ~ p');
paragraphs.each(el => el.style.fontWeight = 'bold');
Отличия от +:
+ выбирает только первый следующий элемент.~ выбирает все подходящие элементы, которые идут после
указанного.Cash позволяет комбинировать комбинаторы для сложных выборок. Это особенно полезно для динамических интерфейсов, где структура DOM может быть глубокой и непредсказуемой.
// Все <span> внутри <div>, которые непосредственно следуют за <h3>
const specialSpans = cash('h3 + div span');
specialSpans.addClass('special');
Рекомендации по комбинированию:
id,
класс), затем добавлять комбинаторы.Методы Cash позволяют фильтровать элементы после выборки, что делает комбинаторы более гибкими.
// Выбираем все <li> прямых потомков <ul>, которые содержат <a>
const links = cash('ul > li').filter('li:has(a)');
links.css('textDecoration', 'underline');
Особенности:
:has() позволяет проверять наличие дочерних
элементов.filter() работает аналогично CSS-селекторам,
комбинируя их с комбинаторами для точной выборки.>) и соседние (+,
~) обычно быстрее, чем универсальные потомки
().:has, :not,
:first, :last): позволяют исключать
или уточнять элементы.Пример:
// Все активные ссылки внутри меню, которые идут после заголовка
cash('#main-menu > li.active ~ li > a').css('color', 'red');
Использование комбинаторов в Cash обеспечивает гибкость и точность управления DOM, снижает необходимость ручного перебора элементов и упрощает работу с динамическим контентом. Их правильное комбинирование позволяет создавать чистые и производительные интерфейсы.