Экземпляр Awesomplete после инициализации связывает исходное поле ввода с набором внутренних DOM-узлов, которые формируют интерфейс автодополнения. Вся работа библиотеки строится вокруг трёх ключевых элементов: поля ввода, контейнера списка и самого списка подсказок.
Внутреннее состояние объекта доступно через экземпляр класса и может быть использовано для тонкой настройки поведения, кастомизации рендера и интеграции с внешним UI-кодом.
input — это ссылка на исходный HTMLInputElement,
переданный при создании экземпляра.
const aw = new Awesomplete(inputElement);
console.log(aw.input);
Через input осуществляется:
input.value)Важно учитывать, что именно это поле остаётся единственным источником истины для текущего ввода. Все подсказки строятся вокруг его состояния.
ul представляет собой DOM-элемент списка
<ul>, который Awesomplete использует для отображения
вариантов автодополнения.
const list = aw.ul;
console.log(list.tagName); // UL
Особенности ul:
<li> для каждой подсказкиЧерез ul можно:
Пример кастомизации:
aw.ul.classList.add("custom-suggestions");
container — это DOM-элемент-обёртка, внутри которого
размещаются input и ul.
console.log(aw.container);
Если Awesomplete инициализируется без явного контейнера, он создаёт его автоматически, оборачивая исходный input.
Функции контейнера:
Типичная структура:
<div class="awesomplete">
<input />
<ul></ul>
</div>
Доступ к container позволяет интегрировать библиотеку в
сложные UI-системы, где требуется управление слоями, z-index и
позиционированием.
Каждая подсказка внутри ul представлена элементом
<li>. Эти элементы создаются динамически при каждом
обновлении списка.
Доступ к ним возможен через:
aw.ul.children
или косвенно через обработку событий.
Каждый li содержит:
Awesomplete использует класс selected для активного
элемента:
aw.ul.querySelectorAll("li.selected");
Изменение состояния происходит при навигации клавишами или программном вызове методов.
Внутренне Awesomplete хранит массив данных, который синхронизируется
с DOM-элементами li.
Логика построения:
<li>Эта связь позволяет:
Awesomplete хранит текущее состояние выделения:
Пример обращения:
aw.index
aw.ul.children[aw.index]
index используется для:
Активный элемент обычно имеет класс:
li[aria-selected="true"]
или внутренний класс selected.
Прямой доступ к внутренним элементам позволяет расширять стандартное поведение библиотеки.
aw.ul.style.maxHeight = "300px";
aw.ul.style.overflowY = "auto";
aw.container.setAttribute("data-state", "active");
aw.ul.addEventListener("click", (e) => {
if (e.target.tagName === "LI") {
console.log("Выбрана подсказка:", e.target.textContent);
}
});
Awesomplete поддерживает строгую связь между:
input.valueulliЛюбое изменение одного из элементов приводит к пересборке состояния.
При вводе текста:
liindexulСостояние списка часто контролируется через классы:
open — список открытhidden — список скрытactive — активный элементПример управления:
aw.ul.classList.add("open");
aw.ul.classList.remove("hidden");
Контейнер может использоваться для глобального состояния:
aw.container.classList.toggle("awesomplete--focused");
Все внутренние элементы доступны напрямую через объект экземпляра:
aw.inputaw.ulaw.containerЭто позволяет:
Связка этих элементов формирует минимальный, но достаточный API для глубокой модификации интерфейса без изменения исходного кода библиотеки.