I have filters and buttons set up for an array of data where a user clicks a button and the characters that match that button appear on the screen, but when I click a different button I have to refresh the page and click the new button again every time I want the data to appear. I want to switch it so every time a user clicks that same button only those characters that match the button show up on the screen without having to refresh the page, for the life of me I cannot get it to work correctly.
Javascript:
const mainHeader = document.querySelector('header')
//making male characters bounce on page
let maleButton = document.createElement('button')
maleButton.textContent = 'Male Characters'
maleButton.addEventListener('click', () => {
maleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
matchedDiv.setAttribute("style", "display: none;")
})
});
//making female characters bounce on page
let femaleButton = document.createElement('button')
femaleButton.textContent = 'Female Characters'
femaleButton.addEventListener('click', () => {
femaleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
matchedDiv.setAttribute("style", "display: none;")
})
});
//making non gender characters bounce on page
let otherButton = document.createElement('button')
otherButton.textContent = 'Non-Gender Characters'
otherButton.addEventListener('click', () => {
otherCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
matchedDiv.setAttribute("style", "display: none;")
})
});
//Want to add films button
let filmsButton = document.createElement('button')
filmsButton.textContent = 'Films'
filmsButton.addEventListener('click', () => {
otherCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
matchedDiv.setAttribute("style", "display: none;")
})
femaleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
matchedDiv.setAttribute("style", "display: none;")
})
maleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
matchedDiv.setAttribute("style", "display: none;")
})
});
mainHeader.appendChild(maleButton)
mainHeader.appendChild(femaleButton)
mainHeader.appendChild(otherButton)
mainHeader.appendChild(filmsButton)
//filters
const maleCharacters = people.filter(person => person.gender !== 'male')
const femaleCharacters = people.filter(person => person.gender !== 'female')
const otherCharacters = people.filter(person => person.gender !== 'female' && person.gender !== 'male')