Я пытаюсь установить свойство display для "none" для всех элементов, которые имеют класс "option", но затем я хочу извлечь элемент, на который я нажал, и изменить свойство отображения с "none" на "block".
Я хотел бы найти решение в vanilla JS.
<h1 class="option" id="header1">Header 1</h1>
<h1 class="option" id="header2">Header 2</h1>
<h1 class="option" id="header3">Header 3</h1>
<h1 class="option" id="header4">Header 4</h1>
<h1 class="option" id="header5">Header 5</h1>
document.querySelector('*').addEventListener('click', (event) => {
let clickedId = event.target.id;
let clickedClass = event.target.className;
if (clickedClass === "option") {
var list = document.querySelectorAll(".option");
for (var i = 0; i < list.length; i++) {
list[i].style.display = "none";
};
document.getElementById(clickedId).style.display = "block";
}
console.log(event.target.style.display);
});
Спасибо
Ваш код работает, но делает некоторые ненужные вещи, такие как:
document.querySelector('*')
когда у вас уже есть объект document
к которому можно присоединить событияdocument.getElementById(clickedId)
когда у вас уже есть event.target
чтобы указать на ваш элемент document.getElementById(clickedId)
display
на none
а затем block
для вашего элемента с щелчком В идеале вы должны прикрепить событие click
к ближайшему родительскому элементу своих элементов, если это возможно. Вот как я переписал бы ваш код:
let parent = document.querySelector("#all_options_parent") || document;
parent.addEventListener('click', (event) => {
if (event.target.className === "option") {
event.target.style.display = "block";
let allOptions = parent.querySelectorAll(".option");
for (let option of allOptions) {
if (option != event.target) {
option.style.display = "none";
}
}
}
});
просто игнорируйте тот, который был нажат.
document.querySelector('*').addEventListener('click', (event) => {
let clickedId = event.target.id;
let clickedClass = event.target.className;
if (clickedClass === "option") {
var list = document.querySelectorAll(".option");
for (var i = 0; i < list.length; i++) {
// ignore the one that was clicked
if (list[i] == event.target) continue
list[i].style.display = "none";
};
// document.getElementById(clickedId).style.display = "block";
}
// it is only useful if you display all the hidden again.
event.target.style.display = "block";
console.log(event.target.style.display);
});
<h1 class="option" id="header1">Header 1</h1>
<h1 class="option" id="header2">Header 2</h1>
<h1 class="option" id="header3">Header 3</h1>
<h1 class="option" id="header4">Header 4</h1>
<h1 class="option" id="header5">Header 5</h1>
<h1/>
, как вы можете щелкнуть по нему (хотя он был скрыт{display : none;}
)? Вы когда-нибудь думали об этом?