Slim Sel ect — лёгкая JavaScript-библиотека для замены стандартного
HTML-элемента <select> более удобным, современным и
гибким интерфейсом выбора. Библиотека предназначена для создания
выпадающих списков с поиском, множественным выбором, динамической
загрузкой данных и расширенной настройкой внешнего вида без зависимости
от jQuery.
Slim Select используется как альтернатива тяжёлым UI-компонентам и подходит для проектов, где важны:
Основная идея библиотеки заключается в том, чтобы сохранить
совместимость с обычным HTML <select>, но
предоставить значительно более удобный пользовательский интерфейс.
Обычный HTML-элемент <select> обладает рядом
ограничений:
<select>
<option>JavaScript</option>
<option>TypeScript</option>
<option>Python</option>
</select>
Основные недостатки:
При работе с длинными списками стандартный select становится неудобным:
<select>
<option>Страна 1</option>
<option>Страна 2</option>
<option>Страна 3</option>
<option>...</option>
<option>Страна 300</option>
</select>
В подобных случаях Slim Select значительно улучшает взаимодействие пользователя с интерфейсом.
Библиотека добавляет встроенное поле поиска:
new SlimSelect({
select: '#countries'
})
После инициализации пользователь может быстро фильтровать значения.
Slim Select поддерживает режим multiple:
<select id="skills" multiple>
<option>JavaScript</option>
<option>PHP</option>
<option>Go</option>
</select>
new SlimSelect({
select: '#skills'
})
Выбранные элементы отображаются в виде отдельных тегов.
Slim Select оптимизирован для большого количества данных:
const data = []
for (let i = 1; i <= 1000; i++) {
data.push({
text: `Элемент ${i}`,
value: i
})
}
Библиотека обеспечивает:
Можно изменять:
Пример:
new SlimSelect({
select: '#users',
settings: {
placeholderText: 'Выберите пользователя',
searchText: 'Ничего не найдено',
searchPlaceholder: 'Поиск'
}
})
Slim Select умеет работать с массивами объектов:
new SlimSelect({
select: '#cities',
data: [
{
text: 'Алматы',
value: 'almaty'
},
{
text: 'Астана',
value: 'astana'
}
]
})
Это особенно полезно при интеграции с API.
Slim Select строится вокруг нескольких ключевых сущностей:
Исходный <select> остаётся в DOM и продолжает
участвовать в отправке формы.
<select id="frameworks">
<option value="vue">Vue</option>
<option value="react">React</option>
</select>
Slim Select скрывает оригинальный select и создаёт собственный интерфейс поверх него.
После инициализации библиотека создаёт:
Структура генерируется автоматически.
Инициализация возвращает экземпляр Slim Select:
const slim = new SlimSelect({
select: '#frameworks'
})
Через него можно управлять компонентом программно.
npm install slim-select
Импорт:
import SlimSelect fr om 'slim-select'
import 'slim-select/styles'
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/slim-select@latest/dist/slimselect.css"
/>
<script src="https://cdn.jsdelivr.net/npm/slim-select@latest/dist/slimselect.min.js"></script>
<select id="language">
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
<option value="py">Python</option>
</select>
new SlimSelect({
select: '#language'
})
После выполнения кода обычный select превращается в интерактивный компонент.
Исходный элемент:
<select id="cars">
<option>BMW</option>
<option>Audi</option>
</select>
После инициализации библиотека:
Это позволяет сохранить совместимость с формами и серверной обработкой.
Slim Select фильтрует элементы по тексту:
new SlimSelect({
select: '#products',
settings: {
searchHighlight: true
}
})
При вводе:
lap
Библиотека отображает только совпадающие варианты:
Laptop
Lapdesk
Lapdock
Одно из важных преимуществ Slim Select — отсутствие зависимости от jQuery.
Для сравнения:
$('#select').plugin()
new SlimSelect({
select: '#select'
})
Это уменьшает:
| Возможность | HTML select | Slim Select |
|---|---|---|
| Поиск | Нет | Да |
| Множественный выбор | Ограничен | Удобный |
| Стилизация | Сложная | Гибкая |
| Placeholder | Ограничен | Да |
| Кастомные события | Минимум | Да |
| Динамические данные | Нет | Да |
| Удаление выбранных элементов | Нет | Да |
<select multiple>
<option>HTML</option>
<option>CSS</option>
</select>
В браузере такой элемент неудобен и визуально устарел.
new SlimSelect({
select: '#technologies'
})
Интерфейс становится значительно удобнее:
Slim Select поддерживает placeholder:
new SlimSelect({
select: '#users',
settings: {
placeholderText: 'Выберите пользователя'
}
})
Это улучшает UX формы.
Библиотека предоставляет события изменения значения.
Пример:
const slim = new SlimSelect({
select: '#country',
events: {
afterChange: (newVal) => {
console.log(newVal)
}
}
})
Событие вызывается после изменения выбора.
Элементы описываются объектами:
[
{
text: 'JavaScript',
value: 'js'
},
{
text: 'Python',
value: 'py'
}
]
Возможны дополнительные поля:
{
text: 'React',
value: 'react',
selected: true,
disabled: false
}
Slim Select поддерживает группировку:
<select id="languages">
<optgroup label="Frontend">
<option>React</option>
<option>Vue</option>
</optgroup>
<optgroup label="Backend">
<option>Node.js</option>
<option>Laravel</option>
</optgroup>
</select>
Группы отображаются в dropdown автоматически.
Поиск активируется автоматически.
Можно изменить настройки:
new SlimSelect({
select: '#cities',
settings: {
searchPlaceholder: 'Введите город'
}
})
const value = slim.getSelected()
slim.setSelected('js')
Для multiple:
slim.setSelected(['js', 'ts'])
slim.setData([
{
text: 'Docker',
value: 'docker'
},
{
text: 'Kubernetes',
value: 'k8s'
}
])
Компонент обновится без перезагрузки страницы.
Slim Select хорошо подходит для AJAX-сценариев:
fetch('/api/users')
.then(response => response.json())
.then(data => {
slim.setData(data)
})
Это удобно для:
Несмотря на кастомный интерфейс, Slim Select остаётся совместимым с HTML-формами.
<form>
<select name="country" id="country">
<option value="kz">Казахстан</option>
</select>
</form>
При отправке формы данные передаются стандартным образом.
Slim Select использует собственные CSS-классы.
Можно:
Пример:
.ss-main {
border-radius: 10px;
padding: 8px;
}
Slim Select адаптирован под мобильные интерфейсы:
Библиотека особенно полезна в следующих сценариях:
Выбор пользователей
Выбор ролей
Фильтрация данных
Категории
Бренды
Фильтры товаров
Выбор сотрудников
Статусы задач
Проекты
Страны
Города
Теги
Навыки
Библиотека значительно легче многих аналогов.
Минимальная инициализация:
new SlimSelect({
select: '#example'
})
Не требуется:
Slim Select написан на современном JavaScript и хорошо интегрируется с:
Несмотря на преимущества, существуют особенности:
| Характеристика | Slim Select | Select2 |
|---|---|---|
| jQuery | Не нужен | Требуется |
| Размер | Маленький | Крупнее |
| Простота | Высокая | Средняя |
| Плагины | Мало | Много |
| Производительность | Высокая | Средняя |
| Современный JS | Да | Частично |
<select id="category"></select>
const slim = new SlimSelect({
select: '#category'
})
Slim Select обновляет:
<select id="framework">
<option value="react">React</option>
<option value="vue">Vue</option>
<option value="angular">Angular</option>
</select>
const slim = new SlimSelect({
select: '#framework',
settings: {
placeholderText: 'Выберите фреймворк',
searchPlaceholder: 'Поиск'
}
})
Такой код создаёт полностью функциональный кастомный select с поиском и современным интерфейсом.