在上篇文章 jQuery 实现下拉菜单方法 中写的代码仅仅是一级下拉菜单的情况,QiQiBoy 提了一下,想想是啊,因为自己平时博客中导航菜单都没有设置子菜单,就算本地测试的博客也只是设了一级菜单而已,已经成为惯性了。于是找了个时间再测试一下多级菜单的情况下,jQuery 的实现多级下拉菜单的方法。
相对前一篇的一级菜单,实现多级下拉菜单只要增加使用 .each() 方法。具体 jQuery 代码如下:
$(document).ready(function() {
$("#nav li ul.children").hide();
$("#nav li > ul.children").each(function() {
$(this).parent("li").hover(function() {
$(this).children(".children:not(:animated)").animate({opacity: "show", height: "show"}, "slow");
}, function() {
$(this).children(".children").animate({opacity: "hide", height: "hide"}, "100");
});
});
});
$("#nav li ul.children").hide();
$("#nav li > ul.children").each(function() {
$(this).parent("li").hover(function() {
$(this).children(".children:not(:animated)").animate({opacity: "show", height: "show"}, "slow");
}, function() {
$(this).children(".children").animate({opacity: "hide", height: "hide"}, "100");
});
});
});
看看 Demo 最后一个菜单 Title5 的效果。
还可以做一下扩展,不要把下拉菜单限定在导航菜单上,让其他带有子菜单的菜单都能实现这效果:
$(document).ready(function() {
function showChild(menu) {
menu.find("li ul").hide();
menu.find("li > ul").each(function() {
$(this).parent("li").hover(function() {
$(this).children("ul:not(:animated)").animate({opacity: "show", height: "show"}, "slow");
}, function() {
$(this).children(".children").animate({opacity: "hide", height: "hide"}, "100");
});
});
}
//调用 showChild() 函数。
showChild($("#nav"));
});
function showChild(menu) {
menu.find("li ul").hide();
menu.find("li > ul").each(function() {
$(this).parent("li").hover(function() {
$(this).children("ul:not(:animated)").animate({opacity: "show", height: "show"}, "slow");
}, function() {
$(this).children(".children").animate({opacity: "hide", height: "hide"}, "100");
});
});
}
//调用 showChild() 函数。
showChild($("#nav"));
});
比如想实现侧边栏的分类菜单下拉效果,加多一行类似 showChild($("#categories")); 的就行了,看你具体的 ID 或是类标签的设置了。
目前 IE6 和 IE7 下有问题。 IE 问题解决,其实不关 jQuery 代码问题,是我 CSS 代码没写好。

嗯嗯,我也没有使用子菜单的习惯呢。
今天又弄了升级版了麽..JQuery一点都不懂~~唉~
@Bee君: 嗯,昨天就弄了,看看 API 咯
貌似只能在ff下执行的哦。。。ie下有问题
@毛线球的猫: 没在 IE 下测试,刚看了下,IE6 和 IE7 都有问题,看来要改进一下。多谢提醒,唉,杯具的 IE
@毛线球的猫: jQuery 代码没问题,是 CSS 代码的问题,已经写好了,现在 IE 下也没问题了。
很不错,方便,我现在都是用css,但只能2级,还有不支持该死的ie6
@zwwooooo: CSS 可以多级啊,更简单:
#nav li:hover > ul.children {display: block;}@Alan: 呵呵,我看到一个bug,ie6不支持 li:hover吧。