class Dropdown { constructor(selector, options) { this.$el = document.querySelector(selector); this.items = options.items; this.$el.querySelector('.dropdown__label').textContent = this.items[0].label; this.$el.addEventListener('click', event => { if (event.target.classList.contains('dropdown__label')) { if (this.$el.classList.contains('open')) { this.close(); } else { this.open(); } } else if (event.target.tagName.toLowerCase() === 'li') { this.select(event.target.dataset.id); } }); const itemsHTML = this.items.map(i => { return `
  • ${i.label}
  • `; }).join(' '); this.$el.querySelector('.dropdown__menu').insertAdjacentHTML('afterbegin', itemsHTML); } select(id) { const item = this.items.find(i => i.id === id); this.$el.querySelector('.dropdown__label').textContent = item.label; this.close(); } open() { this.$el.classList.add('open'); } close() { this.$el.classList.remove('open'); } } const dropdown = new Dropdown('#dropdown', { items: [ {label: 'Москва', id: 'msk'}, {label: 'Санкт-Петербург', id: 'spb'}, {label: 'Новосибирск', id: 'nsk'}, {label: 'Краснодар', id: 'krdr'} ] });