Применить для всех div
Есть код, который применяет действие только к одному блоку div (первому). Гуру по JavaScript, подскажите пожалуйста что сделать, чтобы при наведении курсора на элемент применялся цвет ко всем div, на который наводится курсор?
<div data-add-back-btn="">Блок 1</div> <div data-add-back-btn="">Блок 2</div> <div data-add-back-btn="">Блок 3</div> ... <script> var el = document.querySelector("div"); el.addEventListener("mouseover", mouseOver); el.addEventListener("mouseout", mouseOut); function mouseOver() { el.style.color = "red"; } function mouseOut() { el.style.color = "black"; } </script> CSS не интересует! |
function mouseEnter() { this.style.color = "red"; } function mouseLeave() { this.style.color = "black"; } var div = document.querySelectorAll('div'); for(var i = 0; i < div.length; i++) { div[i].addEventListener('mouseenter', mouseEnter); div[i].addEventListener('mouseleave', mouseLeave); } function mouseHandler(e) { this.style.color = e.type === 'mouseenter' ? 'red' : 'black'; } var div = document.querySelectorAll('div'); for(var i = 0; i < div.length; i++) { div[i].addEventListener('mouseenter', mouseHandler); div[i].addEventListener('mouseleave', mouseHandler); } |
Спасибо, работает! Но, только для стиля CSS. Как сделать цикл для такой конструкции?
<div data-add-back-btn=""><p>Блок 1</p></div> <div data-add-back-btn=""><p>Блок 1</p></div> <div data-add-back-btn=""><p>Блок 1</p></div> var x = document.querySelector("div"); x.onmouseover = function() {this.insertAdjacentHTML('afterbegin', '<span>В div перед p</span>')}; x.onmouseout = function() {this.removeChild(x.childNodes[0])}; Работает только для первого div. Пробовал цикл for, не получилось. |
function mouseEnter() { this.insertAdjacentHTML('afterbegin', '<span>В div перед p</span>') } function mouseLeave() { this.removeChild(this.childNodes[0]) } var div = document.querySelectorAll('div[data-add-back-btn]'); for(var i = 0; i < div.length; i++) { div[i].addEventListener('mouseenter', mouseEnter); div[i].addEventListener('mouseleave', mouseLeave); } P.S.: то что Вы хотите реализовать - можно сделать с помощью CSS. div[data-add-back-btn]::before { content: 'В div перед p'; display: none; } div[data-add-back-btn]:hover::before { display: inline; } |
Цитата:
<span>В div перед p</span>не исчезает. Цитата:
<span>В div перед p</span>будет применяться только к текущему div. т.е. в котором появился код <span>В div перед p</span>. По другому мне для каждого div, потребуется присваивать уникальный идентификатор. И писать js-скрипт под каждый идентификатор, а их 50т. |
function mouseEnter() { var span = document.createElement('span'); span.innerHTML = 'В div перед p'; this.insertBefore(span, this.firstChild); } function mouseLeave() { this.removeChild(this.firstChild); } var div = document.querySelectorAll('div[data-add-back-btn]'); for(var i = 0; i < div.length; i++) { div[i].addEventListener('mouseenter', mouseEnter); div[i].addEventListener('mouseleave', mouseLeave); } |
Благодарю, это то что нужно.
|
Часовой пояс GMT +3, время: 03:02. |