#javascript #addeventlistener #mouseover
Вопрос:
Я пытаюсь изменить фон элементов с помощью класса «заголовок» при наведении курсора мыши.
const heading = document.querySelector('.heading'); const headingAll = document.querySelectorAll('.heading'); headingAll.forEach(item =gt; { item.addEventListener("mouseover",()=gt;{ heading.style.backgroundColor='teal'; }); })
.heading{ background-color: yellow; width: 50%; margin:0 auto; padding: 10px; border: 1px solid red; cursor: pointer; } .heading2,heading3{ margin-top: 10px; }
lt;h1 id='heading' class='heading heading2'gt;First Headinglt;/h1gt; lt;h2 id='heading' class='heading heading2'gt;Sub Headinglt;/h2gt; lt;h3 id='heading' class='heading heading3'gt;Third Headinglt;/h3gt;
Проблема в том, что фон меняется только для первого элемента с классом «заголовок». Я не знаю, как заставить это работать с другими элементами. Как я могу этого достичь?
Комментарии:
1. querySelectorAll-это то, что вы ищете
2. идентификатор должен быть уникальным, не должен повторяться.
3. Ваша проблема в том, что
heading
переменная ссылается на первый элемент, соответствующий переданному селекторуquerySelector()
. Используйтеitem.style.backgroundColor='teal'
вместоheader.style.backgroundColor='teal'
Ответ №1:
В своем фрагменте кода вы не следуете переменной итератора, заданной в forEach
функции обратного вызова. Измените это на item
вместо heading
, и это должно сработать.
const headingAll = document.querySelectorAll('.heading'); headingAll.forEach(item =gt; { item.addEventListener("mouseover",()=gt;{ item.style.backgroundColor='teal'; }); })
.heading{ background-color: yellow; width: 50%; margin:0 auto; padding: 10px; border: 1px solid red; cursor: pointer; } .heading2,heading3{ margin-top: 10px; }
lt;h1 id='heading' class='heading heading2'gt;First Headinglt;/h1gt; lt;h2 id='heading' class='heading heading2'gt;Sub Headinglt;/h2gt; lt;h3 id='heading' class='heading heading3'gt;Third Headinglt;/h3gt;
Обратите внимание, что я избавился от вашей heading
переменной, так как ее не нужно было использовать в моем фрагменте.
Ответ №2:
Вы используете document.querySelector()
, чтобы получить элемент с заголовком имени класса, если есть более одного элемента, он получит только первый. Здесь вам нужно использовать элемент вместо заголовка, чтобы изменить стиль элементов, в который вы добавляете событие наведения курсора мыши.