Как последовательно менять класс динамически-созданных кнопок js
Есть потребность последовательно менять класс динамически создаваемых кнопок при нажатии на каждую следующую.
Ожидание: Есть например три(пять, десть) кнопки. Нажимая на каждую следующую, нужно чтобы обе кнопки меняли свой класс: предыдущая становилась "белая", следующая становилась "красная" и.т.д
Вот, что я на говнокодил (уверен, что есть более крутые решения, но нужно именно так)
let btn_click = document.getElementById('click_me');
btn_click.onclick = function(){
let btn_create = document.getElementById('indata');
let json_in =[
{
data_id: 37,
data_from: 40,
data_to: 44
},
{
data_id: 38,
data_from: 45,
data_to: 49
},
{
data_id: 39,
data_from: 50,
data_to: 59
}
]
let json_data = JSON.stringify(json_in)
btn_create.InnerHTML = '';
let btn_data = JSON.parse(json_data);
for(num in btn_data){
let dat_but = document.createElement('button');
dat_but.className = ('offbtn');
dat_but.id = ('id_'+btn_data[num].data_id);
dat_but.value = btn_data[num].data_id;
dat_but.innerHTML += (' ' + btn_data[num].data_from + '-' + btn_data[num].data_to);
btn_create.appendChild(dat_but)
dat_but.onclick = function(){
//тут меняем класс
if(dat_but.className === 'offbtn'){
dat_but.className = ('onbtn');
}else{dat_but.className = 'offbtn'}
}//end onclick
};//end for
};//eof
.onbtn {
font-family: 'Comfortaa';
font-size: 15px;
color: #ffffff !important;
padding: 15px 25px;
border-radius: 5px;
border: 2px solid #ffffff;
background: #f66d52;
}
.onbtn:hover {
color: #000000 !important;
background: #ff512e;
}
.offbtn {
font-family: 'Comfortaa';
font-size: 15px;
color: #000000 !important;
padding: 15px 25px;
border-radius: 5px;
border: 2px solid #000000;
background: #ffffff;
}
.offbtn:hover {
color: #000000 !important;
background: #ff512e;
}
<button class='offbtn' id='click_me'>click me
</button>
<div id='indata'></div>
Класс меняется, но предыдущая нажатая кнопка по прежнему остается гореть, и перестает только по второму клику.
Источник: Stack Overflow на русском