Несколько кнопок скрыть/показать в одном js файле
Здравствуйте. Я только познакомился с js, т.к занимаюсь версткой. У меня есть 6 кнопок READ MORE на сайте.
Я создал файлик main.js и написал скрипт для первой кнопки. Всё отлично, текст скрывается и показывается, но когда я по такому же принципу пишу для других кнопок - открывается та первая! Создал новый файл js и написал для другой кнопки - сработало. Предполагаю, что я что-то не понимаю и надо делать как-то по-другому. Не могли бы вы мне подсказать, где я ошибся и как написать повторение, но для других кнопок, что бы я не создавал 6 отдельных js файлов? <p class="section-heading1--text"> Lorem ipsum dolor mero moleamet, soluta euism od isea, hiea unereusams ullu tpamco detore aer rper quo, utam signiferuuue uo. Brute inani in prom in <span class="content hidden">Lorem ipsum dolor mero moleamet, soluta euism od isea, hiea unereusams ullu tpamco detore aer rper quo, utam signiferuuue uo. Brute inani in prom in</span></p> <button class="btn" type="button">READ MORE</button> [CSS]hidden { display: none; }
const btn = document.querySelector(".btn");
const content = document.querySelector(".content");
btn.addEventListener("click", btnClick);
function btnClick() {
console.log(content.classList);
if (content.classList.contains("hidden")) {
btn.textContent = "HIDE";
} else {
btn.textContent = "READ MORE";
}
content.classList.toggle("hidden");
}
Если не сложно, то объясните что и как, поподробнее. Большое спасибо! |
Здравствуйте. Предлагаю использовать делегирование событий:
document.body.addEventListener("click", () => {
if (event.target.classList.contains("btn")) {
const content = event.target.previousElementSibling.querySelector(
".content"
);
if (content.classList.contains("hidden")) {
event.target.textContent = "HIDE";
} else {
event.target.textContent = "READ MORE";
}
content.classList.toggle("hidden");
}
});
|
const content = document.querySelectorAll(".content");
const btn = [...document.querySelectorAll(".btn")];
btn.forEach((e) => e.addEventListener('click', btnClick))
function btnClick() {
content[btn.indexOf(this)].classList.toggle("hidden")
}
Текст можно определить как массив в data, в котором выбирать по значению наличия класса "hidden", но можете как и было. |
Fankrai,
либо циклом по всем кнопкам, либо делегирование. |
делегирование
Fankrai,
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.section-heading1--text .content{
display: none;
}
.section-heading1--text.more .content{
display: initial;
}
.section-heading1--text + .btn:after{
content: 'READ MORE'
}
.section-heading1--text.more + .btn:after{
content: 'HIDE'
}
</style>
<script>
document.addEventListener('click', ({target}) => {
if(target.closest('.btn')){
const prev = target.previousElementSibling;
prev.classList.toggle('more')
}
});
</script>
</head>
<body>
<p class="section-heading1--text">
Lorem ipsum dolor mero moleamet,
soluta euism od isea, hiea unereusams
ullu tpamco detore aer rper quo, utam
signiferuuue uo. Brute inani in prom in
<span class="content">Lorem ipsum dolor mero moleamet,
soluta euism od isea, hiea unereusams
ullu tpamco detore aer rper quo, utam
signiferuuue uo. Brute inani in prom in</span></p>
<button class="btn" type="button"></button>
<p class="section-heading1--text">
Lorem ipsum dolor mero moleamet,
soluta euism od isea, hiea unereusams
ullu tpamco detore aer rper quo, utam
signiferuuue uo. Brute inani in prom in
<span class="content">Lorem ipsum dolor mero moleamet,
soluta euism od isea, hiea unereusams
ullu tpamco detore aer rper quo, utam
signiferuuue uo. Brute inani in prom in</span></p>
<button class="btn" type="button"></button>
</body>
</html>
|
Цитата:
|
| Часовой пояс GMT +3, время: 06:40. |