В библиотеке Awesomplete свойство ul представляет собой
ключевой DOM-элемент, через который осуществляется рендеринг списка
подсказок. Это не абстракция и не внутренняя структура данных, а прямой
доступ к HTML-узлу <ul>, создаваемому и управляемому
экземпляром автодополнения.
При инициализации экземпляра автодополнения библиотека создаёт контейнер для списка предложений. Этот контейнер закрепляется за свойством:
instance.ul
Фактически это элемент:
<ul role="listbox"></ul>
Он служит оболочкой для всех элементов подсказок
(<li>), которые формируются при каждом обновлении
набора данных.
Ключевая особенность:
ul существует один на экземплярulПри создании экземпляра:
const input = document.querySelector("input");
const awesomplete = new Awesomplete(input);
внутри конструктора происходит:
ulКаждый раз при вызове обновления списка:
<li> удаляютсяulПример логики:
awesomplete.list = ["Apple", "Banana", "Cherry"];
После фильтрации:
<ul>
<li>Apple</li>
<li>Banana</li>
<li>Cherry</li>
</ul>
При закрытии списка:
ul очищаетсяВажно: сам ul не удаляется из DOM.
ulТак как ul — это полноценный DOM-элемент, он
поддерживает стандартные API:
classListstylesetAttribute / getAttributeappendChild / removeChildinnerHTMLОднако прямое вмешательство требует осторожности, поскольку библиотека ожидает контроль над структурой.
ulОдно из ключевых применений — кастомизация внешнего вида списка.
awesomplete.ul.classList.add("custom-suggestions");
Это позволяет:
awesomplete.ul.style.maxHeight = "200px";
awesomplete.ul.style.overflowY = "auto";
Часто используется для:
ul автоматически получает атрибут:
role="listbox"
и связан с input через:
aria-expandedaria-ownsaria-activedescendantКаждый <li> внутри ul получает:
role="option"
Это обеспечивает:
ulХотя библиотека самостоятельно управляет содержимым, возможны сценарии ручного вмешательства.
awesomplete.ul.innerHTML = "";
Это эквивалентно сбросу списка, но может нарушить внутреннюю логику выделения.
const li = document.createElement("li");
li.textContent = "Custom item";
awesomplete.ul.appendChild(li);
Следует учитывать:
ul при разных режимах работы<ul hidden></ul>
или:
display: none<li>ul становится видимымПри использовании клавиатуры:
ul служит контейнером контекста выделенияulБиблиотека вычисляет положение ul относительно поля
ввода:
getBoundingClientRect()Типичное поведение:
ul размещается под inputulИзменение CSS может затронуть:
Особенно критичны свойства:
position
top / left
width
display
Их переопределение без учёта логики библиотеки может привести к:
ul в
производительностиТак как ul переиспользуется:
Основная нагрузка приходится не на ul, а на генерацию
<li>.
ul с внутренними методами AwesompleteЧерез ul библиотека:
appendChild)innerHTML = "")hidden / style.display)Это делает ul центральной точкой визуального слоя
автодополнения.
При использовании кастомного рендера:
ul может отличатьсяulЭто означает, что даже при полной замене шаблона элементов:
ul остаётся стабильной точкой привязки