Псевдоклассы и псевдоэлементы

Библиотека Cash является лёгкой альтернативой jQuery и предоставляет удобный синтаксис для работы с DOM в JavaScript. Одной из ключевых возможностей при выборе элементов на странице являются псевдоклассы и псевдоэлементы, которые позволяют более гибко взаимодействовать с элементами, не меняя разметку HTML.


Использование псевдоклассов

Псевдоклассы применяются для выбора элементов в зависимости от их состояния, позиции или структуры документа. Cash поддерживает большинство стандартных CSS-псевдоклассов, что позволяет писать лаконичный и читаемый код.

Синтаксис выбора с псевдоклассами:

const items = $('.list-item:first-child'); // выбирает первый элемент с классом list-item

Примеры часто используемых псевдоклассов:

  • :first-child — первый дочерний элемент родителя.
  • :last-child — последний дочерний элемент родителя.
  • :nth-child(n) — n-й дочерний элемент. Можно использовать формулы типа 2n для чётных или нечётных элементов.
  • :not(selector) — выбирает элементы, не соответствующие указанному селектору.
  • :checked — для выбора отмеченных чекбоксов или радио-кнопок.
  • :disabled и :enabled — для выбора элементов формы по состоянию.

Пример с динамическим выбором элементов:

$('li:nth-child(odd)').addClass('odd-item'); // добавляет класс ко всем нечётным элементам списка
$('input:checked').each((i, el) => {
    console.log(el.value); // выводит значения всех отмеченных чекбоксов
});

Важно помнить, что Cash использует метод querySelectorAll для поиска элементов, поэтому поддерживаются только селекторы, совместимые с CSS3.


Псевдоэлементы

Псевдоэлементы позволяют стилизовать отдельные части элемента, например, первую букву текста или вставить контент перед элементом. В Cash псевдоэлементы не могут быть выбраны напрямую для манипуляций через методы библиотеки, так как они не существуют в DOM, но можно работать с ними через CSS-свойства.

Основные псевдоэлементы:

  • ::before — вставляет контент перед содержимым элемента.
  • ::after — вставляет контент после содержимого элемента.
  • ::first-letter — позволяет стилизовать первую букву текста.
  • ::first-line — применяет стили к первой строке блока.

Пример применения через CSS:

$('.title').css('content', '"★ "'); // не будет работать напрямую с псевдоэлементом

Для эффективного применения псевдоэлементов необходимо использовать динамическое добавление стилей:

const style = document.createElement('style');
style.textContent = `
    .title::before {
        content: "★ ";
        color: gold;
        font-weight: bold;
    }
`;
document.head.appendChild(style);

Комбинированные селекторы

Cash поддерживает сложные комбинации псевдоклассов и обычных селекторов, что позволяет создавать гибкие фильтры элементов.

Примеры комбинированных селекторов:

$('.menu li:first-child.active'); // первый дочерний li с классом active
$('input[type="checkbox"]:not(:checked)'); // все неотмеченные чекбоксы
$('ul li:nth-child(3n)').css('background-color', '#f0f0f0'); // каждый третий элемент списка

Фильтрация элементов с помощью методов Cash

Для более точного управления выборкой можно использовать методы .filter() и .not() вместе с псевдоклассами.

$('li').filter(':nth-child(even)').addClass('even');
$('li').not(':first-child').hide();
  • .filter(selector) — оставляет только элементы, соответствующие селектору.
  • .not(selector) — исключает элементы, подходящие под селектор.

Ограничения и особенности

  1. Псевдоэлементы напрямую не доступны через методы Cash, работа возможна только через стили.
  2. Псевдоклассы, основанные на состоянии элементов формы (:checked, :disabled) требуют актуальной DOM-структуры — после динамического изменения состояния необходимо повторно применять селекторы.
  3. Для сложных CSS-селекторов, включая вложенные псевдоклассы, Cash использует нативный querySelectorAll, что обеспечивает производительность, но накладывает ограничения на старые браузеры.

Практические рекомендации

  • Использовать псевдоклассы для выбора элементов по позиции или состоянию без добавления лишних классов.
  • Для псевдоэлементов применять CSS-правила через <style> или внешние стили.
  • Комбинировать методы фильтрации Cash с псевдоклассами для максимальной гибкости.
  • Проверять совместимость с браузерами при использовании сложных CSS-селекторов.

Эта система позволяет создавать динамические, гибкие интерфейсы с минимальным количеством кода, обеспечивая легкость и читаемость, что делает Cash удобным инструментом для работы с DOM и стилизацией элементов через псевдоклассы и псевдоэлементы.