Библиотека Tabbable предназначена для поиска
элементов на странице, которые могут получить фокус с помощью клавиши
Tab. Она используется для управления навигацией по
интерактивным элементам, создания пользовательских интерфейсов с
правильной доступностью и проверки доступности приложений.
Основная функция библиотеки возвращает массив элементов, которые
можно табулировать. Внутри этого механизма учитываются как стандартные
HTML-элементы (input, button, a,
select, textarea), так и элементы с
tabindex, позволяющие расширять область табуляции.
Функция tabbable(element, options) поддерживает
несколько ключевых опций, влияющих на результат поиска:
includeContainerbooleanfalsetabindex="0", установка includeContainer: true
позволит включить его в результат.getShadowRootfunctiontabbable(document.body, {
getShadowRoot: el => el.shadowRoot
});
tabindexnumber | nulltabindex.tabindex. Если null, учитываются все элементы
с допустимым tabindex.Tabbable учитывает не только стандартные интерактивные элементы, но и
пользовательские компоненты с атрибутом tabindex.
Особенности обработки:
display: none или visibility: hidden не
включаются в результат.disabled игнорируются, даже если они имеют
tabindex.tabindex=-1 считаются доступными программно, но не входят в
обычный порядок табуляции.Tabbable возвращает элементы в порядке их табуляции:
tabindex, отсортированные по
возрастанию значения.tabindex (по естественному порядку в
DOM).tabindex="-1" игнорируются для обычной
навигации через Tab.Это позволяет создавать предсказуемую последовательность фокусировки, что критично для доступности интерфейсов.
Для компонентов на основе Shadow DOM библиотека предоставляет гибкий подход:
getShadowRoot позволяет рекурсивно искать
tabbable-элементы внутри каждого Shadow Root.mode: closed будет недоступен без
специальной функции получения корня.Tabbable позволяет комбинировать фильтры и опции:
tabindex.Пример с фильтрацией и включением контейнера:
const focusableElements = tabbable(document.querySelector('#modal'), {
includeContainer: true,
getShadowRoot: el => el.shadowRoot
});
tabindex для обеспечения
правильной доступности.includeContainer удобна для модальных окон или
динамически создаваемых контейнеров, где сам контейнер может получать
фокус.tabindex помогает тестировать и
отлаживать последовательность табуляции.Использование опций Tabbable позволяет создавать предсказуемую и корректную навигацию по элементам интерфейса, поддерживать сложные компоненты и соответствовать стандартам доступности.