Задать вопрос
@lexstile

Как создать select на основе массива?

Есть массив объектов:

[
  { value: 'rating-desc', text: 'По рейтингу', selected: false },
  { value: 'rating-asc', text: 'По рейтингу', selected: false },
  { value: 'alphabet-asc', text: 'По алфавиту А-Я', selected: true },
  { value: 'alphabet-desc', text: 'По рейтингу Я-А', selected: false },
  { value: 'letter-asc', text: 'По количеству букв', selected: false },
  { value: 'letter-desc', text: 'По количеству букв', selected: false },
]

Как на его основе создать select?

let select = `<select>
<option value="${item.value}">${item.text}</option> // здесь маппинг по values
</select>`;
$(this).after(select); // кидаю в DOM
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
this.insertAdjacentHTML('afterend', `
  <select>${arr.map(n => `
    <option value="${n.value}" ${n.selected ? 'selected' : ''}>
      ${n.text}
    </option>`).join('')}
  </select>
`);

или

const select = document.createElement('select');
arr.forEach(n => select.appendChild(Object.assign(document.createElement('option'), n)));
this.insertAdjacentElement('afterend', select);

или

const select = document.createElement('select');
select.append(...arr.map(n => new Option(n.text, n.value, false, n.selected)));
this.after(select);

или

const select = document.createElement('select');
for (const n of arr) {
  const option = document.createElement('option');
  option.textContent = n.text;
  option.setAttribute('value', n.value);
  if (n.selected) {
    option.attributes.setNamedItem(document.createAttribute('selected'));
  }
  select.insertBefore(option, null);
}
this.parentNode.insertBefore(select, this.nextElementSibling);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы