这其实不需要用到循环,而且你将鼠标经过事件放到循环里,思路的出发点就已经错了,你可以这么写,给你个思路.
默认所有li的内容隐藏;
鼠标经过LI时,该li的内容显示.当鼠标经过下一个li的时候,正在显示的li隐藏,鼠标所在的li显示.当鼠标移除时,所有可见的li隐藏;
关键的jquery方法:visible 匹配可见的元素;
根据你问题的代码,我大致猜测可以这么写:
<script>
$("li.mainlevel").hover(function(){
$hideUl=$(this).parent().find('ul:visible').slideUp('1000');
/*其实我觉得,上面这行代码可以省略掉,直接就是鼠标经过时当前显示;鼠标移出时,刚刚的隐藏,这样,无论你鼠标过到哪个,都是只显示一个;*/
$(this).find('ul').slideDown('1000');
},function(){
$(this).find('ul').slideUp('1000');
})
</script>
$("li.mainlevel").each(function(i){
$(this).mouseover(function(){
$("li.mainlevel").slideUp("fast");//先全部收起
$(this).find('ul').slideDown("1000");//展开当前的
});
});
$("li.mainlevel").hover(function(){
$("li.mainlevel").slideUp();
$(this).slideDown();
})
$(this).parent().find("div:visible").slideUp("fast");
$(this).find(".o2").slideDown("1000");
先把已经显示的slideup掉,再把当前的slideDown