Библиотека Awesomplete построена вокруг объекта, который инкапсулирует поведение автодополнения и предоставляет набор изменяемых свойств, влияющих на работу списка, фильтрации, отображения и взаимодействия с пользователем. Изменение этих свойств возможно как на этапе инициализации, так и в процессе выполнения программы, что делает компонент гибким для динамических интерфейсов.
Каждый экземпляр Awesomplete создаётся на основе входного элемента и объекта настроек:
const awesomplete = new Awesomplete(input, {
list: ["Apple", "Banana", "Orange"],
minChars: 1,
maxItems: 10
});
После создания экземпляра доступ к настройкам осуществляется напрямую через свойства объекта:
awesomplete.minChars = 2;
awesomplete.maxItems = 5;
Такой подход позволяет менять поведение без повторной инициализации компонента.
listlist определяет источник данных для автодополнения. Оно может принимать:
awesomplete.list = ["HTML", "CSS", "JavaScript"];
awesomplete.list = [
{ label: "JavaScript", value: "js" },
{ label: "TypeScript", value: "ts" }
];
В этом случае:
label отображается пользователюvalue используется как фактическое значениеawesomplete.list = function() {
return ["React", "Vue", "Svelte"];
};
Функциональный подход применяется при динамической генерации данных, например, при работе с API или локальными фильтрами.
minCharsminChars определяет минимальное количество символов, необходимых для запуска поиска.
awesomplete.minChars = 3;
Поведение:
Использование больших значений снижает нагрузку при работе с большими списками и API-запросами.
maxItemsmaxItems ограничивает количество элементов, отображаемых в выпадающем списке.
awesomplete.maxItems = 7;
При превышении количества совпадений отображаются только первые элементы, что улучшает читаемость интерфейса и ускоряет выбор.
autoFirstautoFirst управляет автоматическим выделением первого элемента списка.
awesomplete.autoFirst = true;
При значении:
true — первый элемент становится активным сразуfalse — активный элемент отсутствует до навигацииДанное свойство влияет на поведение клавиатурной навигации.
filterfilter отвечает за логику отбора элементов из списка.
Стандартная реализация выполняет проверку вхождения строки:
awesomplete.filter = function(text, input) {
return text.toLowerCase().includes(input.toLowerCase());
};
Параметры:
text — элемент спискаinput — введённый текстВозможные модификации:
awesomplete.filter = function(text, input) {
return text.toLowerCase().startsWith(input.toLowerCase());
};
awesomplete.filter = function(text, input) {
return new RegExp("^" + input, "i").test(text);
};
Изменение фильтра позволяет реализовать сложные сценарии поиска, включая морфологию и многокритериальные условия.
sortsort управляет порядком отображения результатов.
awesomplete.sort = function(a, b) {
return a.localeCompare(b);
};
Пример кастомной сортировки по длине строки:
awesomplete.sort = function(a, b) {
return a.length - b.length;
};
Сортировка может учитывать:
itemitem определяет HTML-шаблон одного элемента списка.
awesomplete.item = function(text, input) {
return Awesomplete.$.create("li", {
innerHTML: text
});
};
Изменение позволяет полностью контролировать структуру DOM-элемента.
awesomplete.item = function(text, input) {
const html = text.replace(
new RegExp(input, "gi"),
match => `<mark>${match}</mark>`
);
return Awesomplete.$.create("li", {
innerHTML: html
});
};
Это используется для визуального выделения совпадающих частей строки.
replacereplace определяет, как выбранный элемент вставляется в input.
awesomplete.replace = function(text) {
this.input.value = text;
};
Если list содержит объекты:
awesomplete.replace = function(item) {
this.input.value = item.value;
};
awesomplete.replace = function(text) {
this.input.value = text + " ";
};
Часто применяется для добавления разделителей или тегов.
datadata управляет тем, какое значение используется для фильтрации и отображения.
awesomplete.data = function(item) {
return item.label;
};
Для объектов:
awesomplete.data = function(item) {
return item.name;
};
Это свойство особенно важно при работе со сложными структурами данных.
containercontainer задаёт DOM-элемент, в который помещается список автодополнения.
awesomplete.container = document.querySelector(".custom-container");
Используется для:
ulul представляет собой DOM-элемент списка
(<ul>), используемый Awesomplete.
console.log(awesomplete.ul);
Возможные операции:
awesomplete.ul.classList.add("custom-list");
inputinput — связанный текстовый элемент.
console.log(awesomplete.input.value);
Позволяет:
selectedselected содержит индекс выбранного элемента.
awesomplete.selected = 2;
Используется для:
indexindex отражает текущую позицию активного элемента в списке.
awesomplete.index = 0;
Особенности:
replaceМодификация свойств в рантайме позволяет изменять поведение без пересоздания экземпляра.
awesomplete.maxItems = 3;
awesomplete.minChars = 2;
awesomplete.list = ["Go", "Rust", "Python"];
Такая динамика используется в интерфейсах с контекстной логикой, где данные зависят от состояния приложения.
Некоторые свойства тесно связаны между собой:
list и filter определяют результат
поискаdata влияет на filter и
itemindex, selected и autoFirst
формируют навигациюreplace зависит от структуры данных
listИзменение одного параметра может существенно изменить поведение всей системы автодополнения, особенно при сложных пользовательских сценариях.