我有div结构
<div id="navigate">
<div class="menu">
<div class="group">Mail</div>
<div class="item">Folders</div>
<div class="item">Messages</div>
</div>
<div class="menu">
<div class="group">Contacts</div>
<div class="item">Friends</div>
<div class="item">Work</div>
</div>
<div class="menu">
<div class="group">Setting</div>
<div class="item">General</div>
<div class="item">Account</div>
</div>
</div>
现在所有项目都被隐藏,只显示带有“组”类的div。我想要做的是,如果我将鼠标悬停在特定的菜单div上,则只显示该菜单的项目。
现在我有了这段代码:
function initialise()
{
hideAllItems();
setMouseOvers();
}
function hideAllItems()
{
var nav = document.getElementById("navigate");
var items = nav.getElementsByClassName("item");
for(var i = 0; i < items.length; i++)
{
items[i].style.visibility = "hidden";
items[i].style.display = "none";
}
}
function setMouseOvers()
{
var nav = document.getElementById("navigate");
var menuArr = nav.getElementsByClassName("menu");
for(var x = 0; x < menuArr.length; x++)
{
var itemArrs = menuArr[x].getElementsByClassName("item");
/*var show = function(){ show(itemArrs); };
var hide = function(){ hide(itemArrs); };*/
menuArr[x].onmouseover=function(){ show(itemArrs); };
menuArr[x].onmouseout=function(){ hide(itemArrs); };
}
}
function show(itemArr)
{
for(var i = 0; i < itemArr.length; i++)
{
alert(itemArr[i].innerHTML);
itemArr[i].style.visibility = "visible";
itemArr[i].style.display = "block";
}
}
function hide(itemArr)
{
for(var i = 0; i < itemArr.length; i++)
{
itemArr[i].style.visibility = "hidden";
itemArr[i].style.display = "none";
}
}
这样可行,认为只显示常规和帐户,无论我将鼠标悬停在哪个菜单上。我隐约明白什么是错的,但我无论如何也看不到它。有任何想法吗?我不想改变html结构(例如添加id,或创建特定的类),如果我能帮助它的话!
答案 0 :(得分:2)
我知道您很可能正在寻找一个javascript解决方案,但您可以使用简单的CSS解决方案:
.group:hover ~ .item {
display: block;
}
但请注意,较早的IE(&lt; 8)浏览器SUPPORT不支持它。如果您想使用它,它取决于您的目标组。
答案 1 :(得分:2)
为什么不简单地使用CSS:DEMO
.menu .item{
display:none;
}
.menu:hover .item{
display:block;
}
答案 2 :(得分:0)
当您要求仅限JavaScript 解决方案(HTML / css无变化)时,我建议如下:
问题是在匿名函数中使用“itemArrs”,因为只有最新的“itemArrs”用于所有这些,使用“this”代替。
例如:
...
groups[x].onmouseover=function(){ show(this); };
...
和
function show(item) {
var items = item.parentNode.getElementsByClassName("item");
...
可以在此处找到有效的完整的JS-only解决方案: http://jsfiddle.net/Wn4d4/3/