javascript - 有没有办法简化这个jquery?

标签 javascript jquery

我编写了一个具有以下结构的下拉菜单。它应该在点击时下拉,并在点击时关闭。

这是 HTML

<ul id="nav" class="nav">
    <li>
        <a id="menu1" class="menu">MENU 1</a> <!-- top menu -->
        <div id="submenu1" class="submenu"> <!-- hidden by default -->
            <a href="#">SUBMENU ITEM 1</a> <!-- submenu item -->
            <a href="#">SUBMENU ITEM 2</a>
        </div>
    </li>

    <li>
        <a id="menu2" class="menu">MENU 2</a>
        <div id="submenu2" class="submenu">
            <a href="#">SUBMENU ITEM 1</a>
            <a href="#">SUBMENU ITEM 2</a>
            <a href="#">SUBMENU ITEM 2</a>
        </div>
    </li>
</ul>

这就是 JavaScript(使用 jQuery)

$("#menu1").click(function() {
    $("div.submenu").hide(); // hide all menus
    $("#submenu1").toggle(); // open this menu
});
$("#menu2").click(function() {
    $("div.submenu").hide(); // hide all menus
    $("#submenu2").toggle(); // open this menu
});
$("#menu3").click(function() {
    $("div.submenu").hide(); // hide all menus
    $("#submenu3").toggle(); // open this menu
});
$("#menu4").click(function() {
    $("div.submenu").hide(); // hide all menus
    $("#submenu4").toggle(); // open this menu
});

$(document).bind('click', function(e) {
    var $clicked = $(e.target);
    if (! $clicked.parents().hasClass("nav"))
    $("div.submenu").hide();
});

JS 的第一部分有很多重复,有没有办法让它更短、更好、更好?

最佳答案

您应该能够将脚本缩减为:

$(".nav .menu").click(function() {
   $("div.submenu").hide(); // hide all menus
   $(this).next().toggle(); // open this menu
});
$(document).click(function(e) {
    if (! $(e.target).parents().hasClass("nav"))
    $("div.submenu").hide();
});

关于javascript - 有没有办法简化这个jquery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838512/

相关文章:

javascript - 具有 2 个不同长度的数组?

javascript - 子弹时间 CSS 动画减速

c# - 解析 JSON 对象数组

javascript - Jquery:删除 $ ('#id' ).on(...) 元素的 id 更改时的监听器

javascript - 选中一定数量的复选框后调用函数

JavaScript 商店脚本无法按预期运行

javascript - Websocket 从函数返回

javascript - 使用提交按钮将 html 数据检索到表单输入中

javascript - 如何在react-router-dom中使用基于角色的身份验证?

jquery - HTML5/CSS3制作一个正方形div,宽度为100%,需要高度等于宽度