javascript - 自定义 Accordion 菜单,jQuery

标签 javascript jquery html css accordion

我写了一个菜单结构here .它应该是 Accordion 类型的菜单 - 当您单击一个元素时它会打开,当您单击另一个元素时它会打开并且第一个关闭。 我尝试了不同的东西,但仍然无法正常工作。有人可以检查代码并告诉那里必须添加什么吗?谢谢! html 必须保持完整。

<ul class="side_menu">
<li><span>Level 1</span>
    <ul>
        <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
        <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
        <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
    </ul>
</li>
<li><span>Level 1</span>
    <ul>
        <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
        <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
    </ul>
</li>
<li><span>Level 1</span>
    <ul>
        <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
       <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
        <li><span>Level 2</span>
            <ul>
                <li><a href="#">Level 3</a></li>
                <li><a href="#">Level 3</a></li>
            </ul>
        </li>
    </ul>
</li>
</ul>

这是我的 js:

jQuery(".side_menu li span").click(function(){
    if (jQuery(this).parent("li").hasClass("opened")) 
    {
        jQuery(this).parent("li").removeClass("opened");
        jQuery(this).next("ul").slideUp(200);
    } else {
        jQuery(this).parent("li").addClass("opened");
        jQuery(this).next("ul").slideDown(200);
    };
  });

最佳答案

我绝对是更少代码的拥护者。切换这些元素应该可以满足您的预期需求。像这样的东西:

jQuery(".side_menu li span").click(function(){
    $li = jQuery(this).closest('li');
    $li.toggleClass('open');
    $li.siblings('.open').removeClass('open').find('>ul').slideToggle(200);
    $li.find('>ul').slideToggle(200);
});

Fiddle

关于javascript - 自定义 Accordion 菜单,jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006177/

相关文章:

javascript - 如何在 Angular 2 中使用 ngIf-else 中的表达式

javascript - 如何使用 WhatsApp 分享按钮分享图片?

javascript - 高效查找 jQuery 中某个索引之前的所有子项

javascript - 鼠标输入和页面刷新上的 jQuery Animate

HTML/CSS Table Cell 在底部只对齐一个按钮;

javascript - 页面加载时触发 jQuery 函数

javascript/jquery : problem calling a function inside an object (function undefined)

jquery - 为 JQueryUI 使用外部图标

java - 从速度模板中的字符串中删除双引号

html - 将文本与其他 div 元素对齐