Метод getData() в Slim Select предназначен для получения
полного набора данных, которыми управляется экземпляр селекта. Он
возвращает структуру, описывающую все доступные элементы выбора, включая
активные, неактивные, выбранные и сгруппированные опции.
Основная задача метода — предоставить доступ к внутреннему состоянию
списка опций без необходимости напрямую обращаться к DOM-элементам или
исходному <select>.
Метод вызывается у экземпляра Slim Select:
ss.getData()
Возвращаемое значение — массив объектов, каждый из которых
соответствует одной опции (или группе опций, если используются
optgroup).
Метод не принимает параметров и не модифицирует состояние компонента.
Каждый элемент массива представляет собой объект, описывающий одну опцию. Типичная структура включает следующие поля:
Пример возвращаемой структуры:
[
{
value: "1",
text: "JavaScript",
selected: false,
disabled: false
},
{
value: "2",
text: "TypeScript",
selected: true,
disabled: false
}
]
В стандартном случае метод возвращает плоский массив объектов,
соответствующих <option> элементам.
<select id="langs">
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
</select>
const ss = new SlimSelect({
select: '#langs'
});
const data = ss.getData();
Результат будет содержать две записи без вложенности.
При включённом multiple структура данных не меняется, но
поле selected становится ключевым для определения выбранных
элементов.
const selectedItems = ss.getData().filter(item => item.selected);
Такой подход позволяет получать все выбранные значения без вызова отдельного метода получения выбранных элементов.
При использовании группировки (<optgroup>) данные
могут возвращаться в иерархическом виде или плоско, в зависимости от
версии и конфигурации Slim Select.
Пример HTML:
<select>
<optgroup label="Frontend">
<option value="react">React</option>
<option value="vue">Vue</option>
</optgroup>
</select>
Пример логической структуры:
[
{
label: "Frontend",
options: [
{ value: "react", text: "React", selected: false },
{ value: "vue", text: "Vue", selected: false }
]
}
]
getData() возвращает полный набор опций, включая
невыбранные.
ss.getData()
getSelected() (или аналогичные методы в зависимости от
версии) возвращает только выбранные значения.
ss.getSelected()
Разница принципиальна при работе с большими списками, где важно не перегружать логику фильтрацией на стороне клиента.
getData() оперирует внутренним состоянием Slim Select,
которое может отличаться от DOM:
selected синхронизировано с UIПрямой доступ к <select>.options не всегда
отражает актуальное состояние компонента после инициализации.
Метод часто применяется для валидации или анализа текущего состояния выбора:
const hasSelection = ss.getData().some(item => item.selected);
При использовании state-менеджеров можно преобразовать данные Slim Select в удобный формат:
const state = ss.getData().map(item => ({
id: item.value,
title: item.text,
active: item.selected
}));
Если опции добавляются или удаляются в рантайме,
getData() позволяет получить актуальную картину без
дополнительного хранения состояния:
const currentOptions = ss.getData();
const enabledOptions = currentOptions.filter(o => !o.disabled);
Метод не предназначен для:
Любые изменения должны выполняться через API Slim Select, иначе внутреннее состояние может рассинхронизироваться с UI.
При больших списках (сотни и тысячи элементов) вызов
getData() может возвращать значительный объём данных. В
таких случаях:
Slim Select позволяет расширять данные через дополнительные поля. Эти
поля доступны через getData():
const data = ss.getData();
const withMeta = data.map(item => item.data?.category);
Такой подход используется при сложных интерфейсах, где опции содержат метаинформацию (категории, теги, идентификаторы API и т.д.).
Если селект не содержит опций, метод возвращает пустой массив:
[]
Это поведение упрощает обработку, так как не требует дополнительных
проверок на null или undefined.
После операций вроде добавления, удаления или обновления опций через
API Slim Select, результат getData() автоматически отражает
текущее состояние:
ss.addData([{ text: "New option", value: "new" }]);
const updated = ss.getData();
В таких сценариях метод служит точкой синхронизации состояния компонента и внешней логики.