Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如果一个UL已经打开,如何隐藏另一个UL?_Jquery - Fatal编程技术网

Jquery 如果一个UL已经打开,如何隐藏另一个UL?

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>

所以,我只是按照jQuery代码创建了一个子菜单,我被卡住了。不过,其他一切都很完美

我的HTML结构如下所示:

<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脚本。哦,我现在明白了。我想这就是我匆忙阅读时得到的。我以后也会再查的。再次感谢你。