Структура HTML-элементов в Awesomplete строится вокруг минимального набора узлов, которые библиотека динамически расширяет во время работы. Базовая идея заключается в том, что разработчик предоставляет только поле ввода, а остальные элементы создаются и управляются автоматически.
Ключевым элементом выступает:
<input class="awesomplete" />
или вариант с явной инициализацией:
<input id="search" />
new Awesomplete("#search", {
list: ["JavaScript", "Java", "Python"]
});
Сам HTML минимален, однако после инициализации структура DOM значительно расширяется.
После подключения и активации Awesomplete оборачивает исходный input в дополнительный контейнер:
<span class="awesomplete">
<input id="search" autocomplete="off" />
</span>
Ключевая особенность:
<span class="awesomplete"> создаётся
динамически<input> остаётся в DOM без
заменыТакой подход позволяет сохранять совместимость с формами и не нарушать стандартное поведение input.
Внутри структуры Awesomplete именно input остаётся источником данных и событий.
Основные особенности input:
<input id="search"
autocomplete="off"
aria-autocomplete="list"
aria-expanded="false"
aria-owns="awesomplete_list_1" />
Добавляемые атрибуты:
autocomplete="off" — отключение браузерных
подсказокaria-autocomplete="list" — доступность для
assistive-технологийaria-expanded — состояние раскрытия спискаaria-owns — связь с выпадающим спискомЭти атрибуты управляются автоматически и изменяются в зависимости от состояния списка.
Одним из важнейших элементов структуры является список вариантов:
<ul id="awesomplete_list_1"
role="listbox"
hidden>
</ul>
В Awesomplete этот элемент создаётся динамически и управляется внутренним механизмом.
Основные характеристики UL:
hiddenaria-ownsКаждый вариант автодополнения представляется через
<li>:
<ul id="awesomplete_list_1" role="listbox">
<li role="option" aria-selected="false">JavaScript</li>
<li role="option" aria-selected="false">Java</li>
<li role="option" aria-selected="false">Python</li>
</ul>
Структурные особенности LI в Awesomplete:
role="option" обозначает элемент выбораaria-selected управляет состоянием выделенияПри навигации клавиатурой изменяется состояние:
<li role="option" aria-selected="true">JavaScript</li>
Поведение:
aria-selected="true"Структура Awesomplete опирается на ARIA-атрибуты для построения связей:
aria-owns (input → list)role="listbox" (контейнер)role="option" (элементы списка)aria-expanded (состояние раскрытия)Эти атрибуты обеспечивают:
Awesomplete не создаёт фиксированную HTML-структуру заранее. Вместо этого:
Пример состояния до взаимодействия:
<span class="awesomplete">
<input id="search" />
</span>
После ввода текста:
<span class="awesomplete">
<input id="search" aria-expanded="true" aria-owns="awesomplete_list_1" />
<ul id="awesomplete_list_1" role="listbox">
<li role="option">Result 1</li>
<li role="option">Result 2</li>
</ul>
</span>
Структура классов в Awesomplete задаёт визуальное и функциональное поведение:
awesomplete — корневой контейнерawesomplete [hidden] — скрытие спискаawesomplete > ul — списокawesomplete > ul > li — элементы подсказокДополнительные классы:
mark — подсветка совпадающих символовactive — активный элемент (в некоторых
конфигурациях)HTML-разметка может изменяться библиотекой для выделения совпадений:
<li role="option">
<mark>Ja</mark>vaScript
</li>
Механизм в Awesomplete:
<mark>Список управляется через атрибут hidden:
<ul hidden></ul>
И активное состояние:
<ul></ul>
Изменения в Awesomplete происходят автоматически при:
В типичном рабочем состоянии структура выглядит так:
<span class="awesomplete">
<input aria-expanded="true" aria-owns="awesomplete_list_1" />
<ul id="awesomplete_list_1" role="listbox">
<li role="option" aria-selected="true">Item 1</li>
<li role="option" aria-selected="false">Item 2</li>
</ul>
</span>
Эта модель отражает полный цикл работы Awesomplete: от ввода данных до выбора элемента из списка.