jquery - 尝试在 DIV 单击上展开/折叠 jQuery 菜单

标签 jquery html css

好的,我以前做过,但我的代码不工作,所以我知道我一定做错了什么。当访问者单击包含向上箭头或向下箭头的 CSS 生成图像的 div 时,我试图扩展我的菜单。我不希望在访问者单击主链接时打开子菜单,因为我仍然希望该链接指向某个地方。我无法让我的代码合作。我做错了什么?

css 包含在 jsfiddle 中.

jQuery

$("#b-links div").click(function(){

    //variables
    var mainMenu = $(this).closest("ul");
    var subMenu = $(this).siblings("ul");
    var openArrow = mainMenu.find("div.arrow-open");
    var openMenu = mainMenu.find("ul.open");

    //if this submenu is not currently open

    if (!$(this).is(openArrow)){

    openMenu.removeClass("open").slideUp(); //close open menu
    openArrow.removeClass("arrow-open").addClass("arrow-closed"); // change open arrow
    $(this).removeClass("arrow-closed").addClass("arrow-open"); // change closed arrow
    subMenu.addClass("open").slideDown(); // open this submenu

    } else {

    //if this submenu IS currently open

        openMenu.removeClass("open").slideUp(); close open menu
        openArrow.removeClass("arrow-open").addClass("arrow-closed"); change open arrow
    }
});

HTML

<ul id="b-links">
    <li><a href="#">Main Link</a><div class="arrow-closed"></div>
    <ul>
        <li><a href="#">SubMenu Link</a></li>
        <li><a href="#">SubMenu Link</a></li>
        <li><a href="#">SubMenu Link</a></li>
        </ul></li>
    <li><a href="#">Main Link</a><div class="arrow-closed"></div>
        <ul>
        <li><a href="#">SubMenu Link</a></li>
        <li><a href="#">SubMenu Link</a></li>
        <li><a href="#">SubMenu Link</a></li>
    </ul></li>
    <li><a href="#">Main Link</a><div class="arrow-closed"></div><ul>
        <li><a href="#">SubMenu Link</a></li>
        <li><a href="#">SubMenu Link</a></li>
        <li><a href="#">SubMenu Link</a></li>
    </ul></li>

代码实际上在 jsFiddle 中做了一些事情(错误的事情,但至少是一些事情)。相同的代码在我的实际网页上没有任何作用。我已经检查以确保 jQuery 在我的页面上正常工作(我让一些东西消失了)。

这是我的菜单图片,所以你可以看到我说的箭头

enter image description here

最佳答案

使用 Jquery 可以按如下方式完成

$(document).ready(function(){
    $('#b-links ul').hide();  //  hide all ul elements which belongs to #b-link
    $('a').click(function(){  //  this works on link click. 
        $('#b-links ul').hide(); // hide displayed ul elements
        $(this).siblings().slideDown(); // show required element

    });
});

或点击div

$('#b-links div').click(function(){ 

    if($(this).hasClass('arrow-closed')){ 
        $('#b-links ul').slideUp();
        $('#b-links div').removeClass('arrow-open').addClass('arrow-closed');
        $(this).removeClass('arrow-closed').addClass('arrow-open');
        $(this).siblings().slideDown();
    }else{

        $(this).removeClass('arrow-open').addClass('arrow-closed');
        $('#b-links ul').slideUp();
    } 

});

这就是阻止 jQuery 显示和隐藏元素的原因

#b-links li ul li {
    display: none;
} 
#b-links li ul {
    display: none;
}

关于jquery - 尝试在 DIV 单击上展开/折叠 jQuery 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766575/

相关文章:

javascript - 更改选项卡时如何从 activeElement 中移除焦点(onfocus/onblur)?

javascript - 我如何用动态输入框求和总值?

html - 需要使用 twitter/bootstrap 更正这个复杂的网格/表格布局

html - 隐藏单选按钮,同时保持其功能

css - SASS : Generated CSS not optimal with loop

javascript - 元素上的 jQuery.ready() 等效事件监听器?

javascript - 如何使用 jquery 按顺序从多个元素移动文本?

javascript - 第二次点击后的 jQuery 解除绑定(bind)事件

html - 在所有页面上打印固定页眉和页脚

html - 下拉菜单显示不正确