Подключение внешней версии библиотеки выполняется через публичные CDN-хранилища, позволяющие загружать JavaScript и стили без установки пакетов и сборщиков. В случае Tom Sel ect используется готовая UMD-сборка, доступная через сети доставки контента, такие как jsDelivr и unpkg.
Библиотека требует подключения двух основных ресурсов: JavaScript-логики и таблицы стилей. Без CSS компонент остаётся функциональным, но теряет визуальную структуру.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/css/tom-select.default.min.css">
<script src="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.min.js"></script>
Использование связки default.min.css и
tom-select.complete.min.js обеспечивает полную сборку с
поддержкой основных плагинов, включая поиск, мультивыбор и кастомные
рендеры.
Альтернативный CDN-источник через unpkg:
<link rel="stylesheet" href="https://unpkg.com/tom-select@2.3.1/dist/css/tom-select.css">
<script src="https://unpkg.com/tom-select@2.3.1/dist/js/tom-select.complete.min.js"></script>
Различие между CDN заключается в политике кеширования и скорости доставки, при этом функциональность остаётся идентичной.
После загрузки ресурсов библиотека становится доступной через
глобальный объект TomSelect. Инициализация выполняется на
стандартных <select> элементах.
<select id="select-beast">
<option value="1">Гиппогриф</option>
<option value="2">Дракон</option>
<option value="3">Феникс</option>
</select>
<script>
new TomSelect("#select-beast");
</script>
Инициализация преобразует стандартный элемент в интерактивный компонент с поиском, клавиатурной навигацией и кастомным отображением значений.
Один и тот же скрипт может применяться к множеству элементов на странице. Каждый экземпляр создаётся независимо, сохраняя собственное состояние и конфигурацию.
<select class="ts">
<option value="a">Альфа</option>
<option value="b">Бета</option>
</select>
<select class="ts">
<option value="x">Кси</option>
<option value="y">Омега</option>
</select>
<script>
document.querySelectorAll(".ts").forEach((el) => {
new TomSelect(el);
});
</script>
Каждый инстанс управляет собственным DOM-деревом и обработчиками событий, не влияя на другие экземпляры.
Конфигурация передаётся вторым аргументом конструктора. При подключении через CDN все параметры остаются доступными без ограничений.
<script>
new TomSelect("#select-beast", {
create: true,
sortField: "text",
maxItems: 3,
placeholder: "Выбор значения"
});
</script>
Параметр create включает возможность добавления новых
значений, отсутствующих в списке. sortField определяет
сортировку, а maxItems ограничивает количество выбранных
элементов.
Критическим моментом является последовательность подключения ресурсов. JavaScript-библиотека должна загружаться после DOM-элементов, на которые она будет применяться.
Вариант с размещением перед закрывающим тегом body:
<body>
<select id="select-beast">
<option value="1">Волк</option>
<option value="2">Лиса</option>
</select>
<script src="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.min.js"></script>
<script>
new TomSelect("#select-beast");
</script>
</body>
Допустимо использование defer, если скрипт подключается
в <head>:
<script defer src="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.min.js"></script>
При отсутствии CSS-библиотеки функциональность сохраняется, но интерфейс остаётся неоформленным. Такой режим используется при интеграции с собственными дизайн-системами.
<script src="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.min.js"></script>
<script>
new TomSelect("#select-beast");
</script>
Стилизация в этом случае полностью переносится на внешние CSS-правила
проекта, включая классы .ts-wrapper,
.ts-control, .ts-dropdown.
CDN позволяет фиксировать версию библиотеки для предотвращения неожиданных изменений поведения.
<script src="https://cdn.jsdelivr.net/npm/tom-select@2.2.2/dist/js/tom-select.complete.min.js"></script>
Фиксация версии обеспечивает стабильность при длительном жизненном цикле проекта, особенно в продуктивных средах.
Некоторые CDN предоставляют ESM-сборки, которые могут использоваться
в современных браузерах с поддержкой type="module".
<script type="module">
import TomSelect fr om "https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.mjs";
new TomSelect("#select-beast");
</script>
Такой подход исключает глобальные переменные и позволяет интеграцию в модульные архитектуры без дополнительного бандлера.
Подключение через CDN не ограничивает использование вместе с другими UI-фреймворками. Tom Select корректно работает в окружениях с динамической генерацией DOM, при условии повторной инициализации после вставки элементов.
<script>
function initSelects() {
document.querySelectorAll("select.ts").forEach((el) => {
if (!el.tomselect) {
new TomSelect(el);
}
});
}
document.addEventListener("DOMContentLoaded", initSelects);
</script>
Проверка el.tomselect предотвращает повторную
инициализацию одного и того же элемента.
При использовании AJAX-навигации или SPA-подобных решений требуется повторный запуск инициализации после изменения DOM.
<script>
function refreshTomSelect() {
document.querySelectorAll("select").forEach((el) => {
if (!el.tomselect) {
new TomSelect(el);
}
});
}
window.addEventListener("popstate", refreshTomSelect);
</script>
Такая схема обеспечивает стабильную работу компонентов при изменении содержимого страницы без полной перезагрузки.