[英]Converting single level to multilevel dropdown menu using jquery
我刚刚开发了一个使用jquery的单级下拉菜单...如何重构相同的代码,使其成为一个多级下拉菜单......
这是我的工作样本 ....
我用过的jquery,
$(document).ready(function() {
$("#Programming ul.child").removeClass("child");
$("#Programming li").has("ul").hover(function() {
$(this).addClass("current").children("ul").fadeIn();
}, function() {
$(this).removeClass("current").children("ul").stop(true, true).css("display",
"none");
});
});
编辑:
Menu1 Menu2
SubMenu1 SubMenu1
Submenu2 SubMenu2
SubMenu21
SubMenu22
第二个子菜单级别可以是任何...
由于你的代码在隐藏/显示列表的子代码方面非常通用,我所做的只是在LI元素中嵌套另一个UL,然后根据它的父元素定位它:
(没有JS更改,只是针对三级菜单项的新CSS系列)
#Programming li ul li ul { left:100px;top:0px; }
你有什么理由不想使用现有的jquery插件吗?
一个好的是: http : //users.tpg.com.au/j_birch/plugins/superfish/
Suckerfish已经存在多年了,因为纯粹的JS版本就像你可以得到的那样坚固。
即使你不使用它,我也相信检查他的来源是有帮助的。
这是我的解决方案: http : //jsbin.com/oteze/9我在Firefox 3.6.8上测试过它。 ADD:现在它也适用于IE7。
您可以在任何地方嵌套任意数量的子菜单。 就像那样:
<li><a href="#">Child 1.2</a>
<ul class="child">
<li><a href="#">Child 1.2.1</a></li>
<li><a href="#">Child 1.2.2</a></li>
</ul>
</li>
我稍微修改了你的代码,所以第一级子菜单和其他级别之间存在差异。 我还将所有显示/隐藏逻辑移动到JS。
$(document).ready(function() {
$("#Programming ul.child-first-level").hide();
$("#Programming ul.child").hide();
$("#Programming ul.child").each(function(index) {
$(this).css("margin-left", $(this).parent().css("width"));
});
$("#Programming li ul.child-first-level").parent().hover(
function() {
$(this).children("ul").fadeIn();
},
function() {
$(this).children("ul").stop(true, true).css("display", "none");
}
);
$("#Programming li ul.child").parent().hover(
function() {
var offset = $(this).children("ul").offset();
offset.top = 0;
$(this).children("ul").offset(offset);
$(this).children("ul").css("margin-left", $(this).parent().css("width"));
$(this).children("ul").fadeIn();
},
function() {
$(this).children("ul").stop(true, true).css("display", "none");
}
);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.