Jquery 如果一个UL已经打开,如何隐藏另一个UL?
所以,我只是按照jQuery代码创建了一个子菜单,我被卡住了。不过,其他一切都很完美 我的HTML结构如下所示:Jquery 如果一个UL已经打开,如何隐藏另一个UL?,jquery,Jquery,所以,我只是按照jQuery代码创建了一个子菜单,我被卡住了。不过,其他一切都很完美 我的HTML结构如下所示: <li><a href="#">smth</a> <ul> <li><a href="#">smth sub</a></li> </ul> </li> <li><a href="#">smth</a>
<li><a href="#">smth</a>
<ul>
<li><a href="#">smth sub</a></li>
</ul>
</li>
<li><a href="#">smth</a>
<ul>
<li><a href="#">smth sub 2</a></li>
</ul>
</li>
您的单击功能似乎正在显示和隐藏您正确单击的元素,但它并没有隐藏可能已打开的所有其他ul。考虑一下第一条线:
$(".subNav").switchClass( "open", "closed", 100 );
这也提出了一个很好的观点。JQuery有一个switchClass()函数,它与您的3行remove->add->fade几乎相同。这是保存一些代码行的好方法
编辑:我还应该注意,我在这里写的js行要求您在所有ul中添加一个类,用于子导航。有其他方法可以做到这一点,但为了便于解释,这似乎最合适。您的单击功能似乎正在显示和隐藏您正确单击的元素,但它并没有隐藏可能已打开的所有其他ul。考虑一下第一条线:
$(".subNav").switchClass( "open", "closed", 100 );
这也提出了一个很好的观点。JQuery有一个switchClass()函数,它与您的3行remove->add->fade几乎相同。这是保存一些代码行的好方法
编辑:我还应该注意,我在这里写的js行要求您在所有ul中添加一个类,用于子导航。还有其他方法可以做到这一点,但为了便于解释,这似乎最合适。我不完全确定我的图像是否正确,因为我不知道您是如何设计菜单样式的,所以我假设它是一个垂直的SMTH列表,子列表显示在右侧 您要做的是在添加“opened”类之前,单击SMTH时关闭所有打开的子列表(通常只有一个子列表) 以下是我如何修改您的代码:
// ...
// if LI element is clicked, open or close sub UL?
$('#header .left li').click(function(event)
{
// if sub UL is closed, we need to open it
if( $(this).find('ul').hasClass('closed') )
{
// close all opened sublists
$('ul.opened')
.removeClass('opened')
.addClass('closed')
.fadeOut('100');
// ...
<> Ben Roux的交换类建议很好,你应该考虑一下。 < P>我不完全确定我的图片是正确的,因为我不知道你是如何设计你的菜单的,所以我假设它是一个垂直的SMTHs列表,其中的子列表显示在右边。 您要做的是在添加“opened”类之前,单击SMTH时关闭所有打开的子列表(通常只有一个子列表) 以下是我如何修改您的代码:
// ...
// if LI element is clicked, open or close sub UL?
$('#header .left li').click(function(event)
{
// if sub UL is closed, we need to open it
if( $(this).find('ul').hasClass('closed') )
{
// close all opened sublists
$('ul.opened')
.removeClass('opened')
.addClass('closed')
.fadeOut('100');
// ...
< Ben Roux的交换类建议很好,你应该考虑一下。< /P>你不使用插件的任何特殊原因(例如,)?你知道使jQuery可爱的事情之一是链接正确吗?f、 前<代码>$(this).find('ul').removeClass('opened').addClass('closed').fadeOut('100')代码>@Matt如果我总是使用插件做任何事情,我就什么也学不到。@balexandre是的,我知道,我想我忘了。谢谢。你不使用插件(例如)有什么特别的原因吗?你知道让jQuery变得可爱的一个原因是链接正确吗?f、 前<代码>$(this).find('ul').removeClass('opened').addClass('closed').fadeOut('100')代码>@Matt如果我总是使用插件做任何事情,我就什么也学不到。@balexandre是的,我知道,我想我忘了。谢谢。+1用于
switchClass()
,但请注意,方法是由jQuery UI提供的,而不是由核心工具包提供。+1用于switchClass()
,但请注意,方法是由jQuery UI提供的,而不是由核心工具包提供的。我没有完全掌握switchcla的内容,因为它没有任何效果,我想我的代码对那种能力来说太坏了。但你的解决方案非常有效。谢谢,不客气。正如Frédéric Hamidi在对Ben回答的评论中提到的那样,“[switchClass]是由jQuery UI提供的,而不是由核心工具包提供的”。如果你想使用这个方法,你需要包括jQueryUI脚本。哦,我现在明白了。我想这就是我匆忙阅读时得到的。我以后也会再查的。再次感谢。我没有完全掌握switchClas的东西,因为它没有任何效果。我想我的代码对那种能力来说太糟糕了。但你的解决方案非常有效。谢谢,不客气。正如Frédéric Hamidi在对Ben回答的评论中提到的那样,“[switchClass]是由jQuery UI提供的,而不是由核心工具包提供的”。如果你想使用这个方法,你需要包括jQueryUI脚本。哦,我现在明白了。我想这就是我匆忙阅读时得到的。我以后也会再查的。再次感谢你。