Unpoly предоставляет мощный механизм для выборки элементов на странице с помощью селекторов. Библиотека поддерживает не только стандартные CSS-селекторы, но и более сложные, составные, которые позволяют строить гибкие запросы к DOM-элементам. Составные селекторы в Unpoly дают возможность обращаться к элементам на основе их контекста, состояния или связи с другими элементами на странице. Этот механизм сильно расширяет возможности работы с элементами, особенно при динамическом обновлении содержимого без перезагрузки страницы.
Составные селекторы — это способ комбинировать несколько условий для выборки элементов, используя логические операторы и вложенные селекторы. С помощью таких селекторов можно уточнять, какие именно элементы на странице должны быть выбраны, в зависимости от их родительских элементов, атрибутов, классов или других характеристик.
up.select('#container .item.active')
Этот селектор выберет все элементы с классом .item
внутри контейнера с ID #container, при этом элемент должен
быть активен (иметь класс active).
Unpoly поддерживает два ключевых символа для создания составных селекторов — пробел и знак «>». Они используются для указания отношений между элементами.
up.select('#container .item .price')
Этот селектор найдет все элементы с классом .price,
которые находятся где-либо внутри элементов с классом
.item, которые, в свою очередь, являются потомками
контейнера с ID #container.
up.select('#container > .item > .price')
Этот селектор выбирает элементы с классом .price,
которые являются непосредственными потомками элементов с классом
.item, которые, в свою очередь, являются непосредственными
потомками элемента с ID #container.
Unpoly также поддерживает псевдоклассы и атрибуты, что позволяет создавать более сложные и точные селекторы.
Псевдоклассы позволяют выбирать элементы в зависимости от их состояния, порядка или других характеристик. Например, можно выбрать первый или последний элемент из коллекции:
up.select('#container .item:first-child')
Этот селектор найдет первый элемент с классом .item,
который является первым потомком внутри контейнера с ID
#container.
up.select('#container .item:last-child')
Этот селектор выбирает последний элемент с классом .item
внутри контейнера.
Атрибуты позволяют выбирать элементы, исходя из наличия или значения определенного атрибута.
up.select('input[type="text"]')
Этот селектор найдет все элементы input с атрибутом
type, равным text.
up.select('a[href^="https://"]')
Этот селектор выбирает все ссылки (a), у которых атрибут
href начинается с https://.
Unpoly поддерживает комбинирование нескольких условий в одном селекторе. Это может быть полезно, если нужно выбрать элементы с несколькими характеристиками.
up.select('#container .item.active[data-id="123"]')
Этот селектор выберет все элементы с классом .item
внутри контейнера с ID #container, которые активны (имеют
класс active) и имеют атрибут data-id, равный
"123".
Одной из особенностей работы с Unpoly является использование псевдоклассов для отслеживания состояния элементов. Это полезно при динамическом изменении содержимого страницы, когда элементы могут менять свои классы или атрибуты в зависимости от пользовательских действий.
:up-doneup.select('.item:up-done')
Этот селектор выбирает все элементы с классом .item,
которые завершили свой процесс (например, асинхронное обновление
содержимого или запросы к серверу).
:up-startedup.select('.item:up-started')
Этот селектор выбирает все элементы с классом .item, для
которых был запущен процесс обновления. Это может быть полезно для
анимаций или отображения индикаторов загрузки.
Составные селекторы также активно используются в контексте работы с компонентами Unpoly. Например, при обновлении части страницы (или компонента) можно динамически взаимодействовать с элементами, обновленными без полной перезагрузки страницы.
up.update('#container', '/path/to/partial').then(function() {
up.select('#container .item.new')
})
Этот код сначала обновляет часть страницы, выбирая элемент с ID
#container, а затем выполняет выборку элементов с классом
.new внутри этого контейнера, как только обновление
завершится.
Использование составных селекторов в Unpoly делает работу с динамическим контентом на странице значительно удобнее и эффективнее, предоставляя разработчикам гибкие инструменты для точного управления состоянием элементов.