В настоящее время вы используете одни и те же id
несколько раз для своих элементов. Быстрое и простое решение - заменить их на class
es. Я также рекомендовал бы добавить общий класс к родительскому div
и изменить имена классов на что-то более семантичное c. Вот мое предложение:
<div class="movie" id="spiderman">
<h2>Spider-man: Homecomming.</h2>
<p>Spider-Man: Homecoming is a 2017 American superhero film based on the Marvel Comics character Spider-Man, co-produced by Columbia Pictures and Marvel Studios, and distributed by Sony Pictures Releasing. It is the second Spider-Man film reboot and the
sixteenth film in the Marvel Cinematic Universe (MCU).
<span class="dots">...</span><span class="more">The film is directed by Jon Watts, from a screenplay by the writing teams of Jonathan Goldstein and John Francis Daley, Watts and Christopher Ford, and Chris McKenna and Erik Sommers. Tom Holland stars as Peter Parker / Spider-Man, alongside Michael Keaton, Jon Favreau, Zendaya, Donald Glover, Tyne Daly, Marisa Tomei, and Robert Downey Jr. In Spider-Man: Homecoming, Peter Parker tries to balance high school life ywith being Spider-Man .</span></p>
<button onclick="myFunction()" class="showMoreButton">Lees meer</button>
<img class="preview" src="img/spidermanfilm.jpg">
</div>
Ради разделения интересов (или здесь, разделения HTML, CSS и JavaScript), давайте также избавимся от атрибута onclick
на button
s:
<button class="showMoreButton">Lees meer</button>
Следующим шагом является соответствующая адаптация вашего JavaScript. Во-первых, теперь нужно найти элементы по имени class
вместо id
. Простой и современный способ сделать это - использовать querySelectorAll()
, который позволяет вам захватить все элементы, которые соответствуют данному селектору CSS. А пока давайте просто возьмем кнопки:
let buttons = document.querySelectorAll(".showMoreButton");
Поскольку мы удалили атрибут onclick
, теперь мы будем использовать addEventListener()
, чтобы назначить функцию обработчика события каждому кнопка:
for (let button of buttons) {
button.addEventHandler("click", onShowMoreHandler);
}
Функция onShowMoreHandler()
теперь будет вызываться при нажатии одной из кнопок. Функции обработчика событий получат объект event
, который содержит ссылку на элемент, вызвавший событие. Оттуда мы можем продвигаться вверх по DOM, используя parentNode
, чтобы найти div
, который затем позволит нам найти и манипулировать соответствующими span
s:
function onShowMoreHandler(event) {
let button = event.target;
let movie = button.parentNode;
let dots = movie.querySelector(".dots");
let more = movie.querySelector(".more");
// Now do the magic!
}
Я думаю, вы можете взять это отсюда. Не забудьте добавить обработку ошибок, например, если одна из querySelector*()
функций не может найти искомые элементы.