I have tried to add, remove and toggle classstyles to 3 <li>
s when user click on 3 buttons having ids 'add' 'delete' and 'toggle' respectively. But the codes repeat itself other than the classList method name and button id.
is there anyway i could write a function to avoid repetition?
here is my code.
document.querySelector('#add').addEventListener('click',()=>{
document.querySelectorAll('#todos li').forEach((li)=>{
li.classList.add('listStyles');
})
});
document.querySelector('#delete').addEventListener('click',()=>{
document.querySelectorAll('#todos li').forEach((li)=>{
li.classList.remove('listStyles');
})
});
document.querySelector('#toggle').addEventListener('click',()=>{
document.querySelectorAll('#todos li').forEach((li)=>{
li.classList.toggle('listStyles');
})
});
You could do it like this:
function modifyClass(action) {
document.querySelectorAll('#todos li').forEach((li)=>{
li.classList[action]('listStyles');
})
}
document.querySelector('#add').addEventListener('click', ()=>{ modifyClass("add") });
document.querySelector('#delete').addEventListener('click', ()=>{ modifyClass("remove") });
document.querySelector('#toggle').addEventListener('click', ()=>{ modifyClass("toggle") });
If you changed the element #delete
to #remove
, you could do:
for (const action of ["add", "remove", "toggle"])
document.getElementById(action).addEventListener("click", ()=>{
document.querySelectorAll('#todos li').forEach((li)=>{
li.classList[action]('listStyles');
});
});