jQuery:只选择ul,而不是ul ul

我正在尝试使用jQuery击败基本的手风琴风格菜单。

这是菜单:

http://www.cybart.com/bscg/

这是一段代码,为其提供手风琴function:

$('#access ul li').click(function(){ $('#access ul ul:visible').slideUp();    $(this).children('ul:hidden').slideDown();   }); 

问题:单击子菜单链接会使子菜单向上滑动(并关闭)。

我想在单击子菜单链接时保持子菜单打开,并且仅在单击顶级链接时向上滑动。

如何通过jQuery仅选择顶级ul来为子菜单设置动画? 或者有没有办法选择子菜单链接并“告诉它”以保持子菜单点击打开?

我很感激你的智慧!

看起来你需要在CSS中使用>运算符。

.foo > .bar选择具有类bar所有元素,类bar是具有类foo的元素的直接子元素

得到它,工作代码:

 $('#access ul.menu > li > a').click(function(){ $('#access ul ul:visible').slideUp(); $(this).siblings('ul').slideDown(); }); }); 

为了防止菜单再次向上滑动,这有效:

 $('#access ul.menu > li > a').click(function(){ var siblingUl = $(this).siblings('ul'); if(siblingUl.is(':visible')) { // The currently open menu was clicked // Remove this if you want nothing to happen siblingUl.slideUp(); return; } $('#access ul ul:visible').slideUp(); siblingUl.slideDown(); }); }); 

您无法停止关闭菜单,因为浏览器正在发出新请求并在您单击链接时加载菜单。 只需观看url栏即可。 单击子菜单链接时,URL会更改。

您需要向URL添加内容以阻止子菜单折叠,或者测试URL以查看是否应在页面加载后重新打开手风琴。

这更简单,对我有用。

 $(".parent").click(function() { $(this).children('ul').slideToggle(); }); 

我花了10分钟阅读并理解您的代码,因为您有很多样式和ID,这使它复杂化很多,请注意最佳实践

你所需要的只是像

  ... $(document).ready(function(){ $(".menu").click(function(){ $(this).next().toggle() }) })