Задача №6
Дано список спортсменів. Потрібно сформувати список тих, які будуть брати участь у змаганні. При цьому є два стовпці. В одному відображені всі спортсмени, в іншому – список тих, хто був вибраний. При натисканні на зелену стрілку спортсмен переміщається у список для змагань. При натисканні на червону стрілку спортсмен переміщається у загальний список.
Рішення:
Загальний список
Обрані для змагання
'use strict'
/**
* @param {Event} e
*/
function moveToChosen({target}) {
const athleteBtn = target.closest('.js-athlete-move')
if (!athleteBtn) return
athleteBtn.classList.remove('u-text-green-500')
athleteBtn.classList.add('u-text-red-500', 'u-flip')
const chosenListEl = document.querySelector('.js-chosen-athletes')
const athleteEl = target.closest('.js-athlete')
chosenListEl?.append(athleteEl)
}
/**
* @param {Event} e
*/
function moveToGeneral({target}) {
const athleteBtn = target.closest('.js-athlete-move')
if (!athleteBtn) return
athleteBtn.classList.remove('u-text-red-500', 'u-flip')
athleteBtn.classList.add('u-text-green-500')
const chosenListEl = document.querySelector('.js-general-athletes')
const athleteEl = target.closest('.js-athlete')
chosenListEl?.append(athleteEl)
}
const generalAthletesList = document.querySelector('.js-general-athletes')
generalAthletesList?.addEventListener('click', moveToChosen)
const chosenAthletesList = document.querySelector('.js-chosen-athletes')
chosenAthletesList?.addEventListener('click', moveToGeneral)
// =============================================================================
/**
* @param {string} templateSelector
* @param {string} name
*/
function createAthleteFromTemplate(templateSelector, name) {
const template = document.querySelector(templateSelector)
if (!(template instanceof HTMLTemplateElement))
throw new TypeError("Can't find the template.")
const athleteEl = template.content.firstElementChild.cloneNode(true)
const nameEl = athleteEl.querySelector('.js-athlete-name')
nameEl.textContent = name
return athleteEl
}
const athletesList = [
'Білостоцький Ростислав',
'Ковальчук Анастасія',
'Коб Тетяна',
'Власенко Ілля',
'Баланюк Владислав',
'Ковтун Ігор',
'Огородник Андрій',
'Корець Вероніка',
]
try {
for (const athlete of athletesList) {
generalAthletesList.append(
createAthleteFromTemplate('.js-athlete-template', athlete),
)
}
} catch (error) {
console.error(error)
}
