Приветствую! Просьба помочь, у меня есть класс "parent", который содержит класс "children", хочу сделать, что бы при наведении на парент, мой чилдрен исчезал, вот мой код:
var parent = document.body.getElementsByClassName("parent");
var children = document.body.getElementsByClassName("children");
for( var i = 0; i < parent.length; i++){
parent[i].onmouseover = function () {
children[i].style.display = "none";
}
}
но при наведении у меня выскакивает ошибка: "Сannot read property 'style' of undefined at HTMLDivElement.parent.(anonymous function).onmouseover"
Заранее большое спасибо за помощь.
проблема в навешивание ивентхендлеров в данном случае, i всегда будет максимальным, то-есть будет равно parent.length, из-за этого children[i] всегда undefined
Вот кусок вроде рабочего кода:
var p = document.body.getElementsByClassName("parent");
var c = document.body.getElementsByClassName("children");
for (var i = 0; i < p.length; i++) {
addEvent(p[i], i);
}
function addEvent(element, index) {
element.addEventListener("mouseover", function () {
document.body.getElementsByClassName("children")[index].style.display = "none";
});
};
<div style="background-color:red" class="parent">
parent 1
</div>
<div style="background-color:darkred" class="parent">
parent 2
</div>
<div style="background-color:yellow" class="children">
children 1
</div>
<div style="background-color:greenyellow" class="children">
children 2
</div>
ПС: почитайте про замыкания
Если элементы все-же вложенные, то этот вариант будет получше :
var p = document.body.getElementsByClassName("parent");
for (var i = 0; i < p.length; i++) {
p[i].addEventListener("mouseover", function () {
var children = this.getElementsByClassName("children");
for (var i = 0; i < children.length; i++) {
children[i].style.display = "none";
}
});
}
<div style="background-color:red;padding:5%;" class="parent">
parent 1
<div style="background-color:yellow" class="children">
children 1
</div>
</div>
<div style="background-color:darkred;padding:5%;" class="parent">
parent 2
<div style="background-color:greenyellow" class="children">
children 2
</div>
</div>
сори что флужу, не удержался :)
Почему не использовать просто CSS
.parent:hover .children{
display: none
}
Если он действительно лежит в паренте
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь подключить css файл в webpack 2Для этого устанавливаю "css-loader","file-loader","less-loader","sass-loader","style-loader", "extract-text-webpack-plugin","url-loader"; создаю отдельный...