Инициализация Slim Sel ect начинается с привязки библиотеки к
существующему HTML-элементу <select>. В основе работы
лежит преобразование стандартного нативного элемента в кастомный
компонент с расширенными возможностями: поиском, кастомным отображением
опций, мультивыбором и управлением через API.
Для корректной инициализации требуется базовая разметка:
<select id="mySelect">
<option value="1">JavaScript</option>
<option value="2">TypeScript</option>
<option value="3">Python</option>
</select>
Элемент может быть как одиночного выбора, так и множественного:
<select id="mySelect" multiple>
<option value="1">React</option>
<option value="2">Vue</option>
<option value="3">Angular</option>
</select>
Ключевое требование — наличие DOM-элемента до момента инициализации.
Slim Select подключается через модульную систему или через CDN.
npm install slim-select
import SlimSelect fr om 'slim-select'
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/slim-select/dist/slimselect.min.css">
<script src="https://cdn.jsdelivr.net/npm/slim-select/dist/slimselect.min.js"></script>
При использовании CDN класс SlimSelect становится
доступным в глобальной области видимости.
Базовый вариант инициализации сводится к передаче CSS-селектора или DOM-элемента:
new SlimSelect({
select: '#mySelect'
})
или через прямую ссылку на элемент:
const selectElement = document.querySelector('#mySelect')
new SlimSelect({
select: selectElement
})
После выполнения создаётся экземпляр Slim Select, который заменяет стандартный интерфейс select-элемента кастомным компонентом.
При инициализации происходит несколько внутренних этапов:
<select> и его опций;Важно, что исходный <select> не удаляется из DOM,
а остаётся скрытым и продолжает хранить актуальное состояние выбранных
значений.
При использовании атрибута multiple Slim Select
автоматически переключается в режим работы с массивом значений:
new SlimSelect({
select: '#mySelect'
})
HTML:
<select id="mySelect" multiple>
<option value="react">React</option>
<option value="vue">Vue</option>
<option value="svelte">Svelte</option>
</select>
В этом режиме библиотека обеспечивает:
Slim Select создаёт отдельный экземпляр для каждого select-элемента. При повторной инициализации без уничтожения предыдущего экземпляра может возникнуть дублирование интерфейса.
Для корректного управления используется метод уничтожения:
const instance = new SlimSelect({
select: '#mySelect'
})
instance.destroy()
После вызова destroy():
<select>;Если элемент создаётся динамически или находится ниже по потоку, инициализацию выполняют после загрузки DOM:
document.addEventListener('DOMContentLoaded', () => {
new SlimSelect({
select: '#mySelect'
})
})
При работе с SPA или динамическими интерфейсами инициализация выполняется после рендера компонента.
Если <select> создаётся программно, его необходимо
добавить в DOM до инициализации:
const select = document.createElement('select')
select.id = 'dynamicSelect'
select.innerHTML = `
<option value="1">One</option>
<option value="2">Two</option>
`
document.body.appendChild(select)
new SlimSelect({
select: '#dynamicSelect'
})
Ключевое требование — наличие элемента в DOM на момент вызова конструктора.
Slim Select допускает инициализацию нескольких независимых экземпляров на странице:
new SlimSelect({ select: '#select1' })
new SlimSelect({ select: '#select2' })
new SlimSelect({ select: '#select3' })
Каждый экземпляр изолирован и управляет только своим элементом.
На этапе инициализации часто возникают ошибки, связанные с неправильной работой с DOM:
destroy();<select>).Типовой сценарий ошибки:
new SlimSelect({
select: '#missingElement'
})
В этом случае библиотека не находит DOM-узел и не создаёт экземпляр.
Хотя Slim Select ориентирован на работу с
<select>, возможна инициализация с программной
моделью данных через обновление состояния после создания экземпляра:
const ss = new SlimSelect({
select: '#mySelect'
})
ss.setData([
{ text: 'Node.js', value: 'node' },
{ text: 'Deno', value: 'deno' }
])
В этом случае исходные <option> заменяются
программной структурой.
После создания экземпляра Slim Select синхронизирует:
<select>;Если в HTML уже задано значение:
<select id="mySelect">
<option value="1">A</option>
<option value="2" selected>B</option>
</select>
Slim Select автоматически определяет выбранный элемент и отражает его в интерфейсе без дополнительных настроек.
При использовании в табах, модальных окнах или скрытых контейнерах
важно учитывать момент инициализации. Если элемент скрыт через
display: none, некоторые браузеры могут некорректно
рассчитать размеры компонента.
В таких случаях инициализацию откладывают до момента отображения элемента:
openModal(() => {
new SlimSelect({
select: '#modalSelect'
})
})
Это обеспечивает корректное построение интерфейса и расчёт размеров выпадающего списка.