javascript - 如何关闭所有用 jquery 打开的元素? (行为类似于 Accordion 菜单)

标签 javascript jquery html css

我有这个 html 代码:

<div id="menu">
    <ul id="menuFuncionalidades">
        <li>
            <div class="menuFuncionalidades_categoria">
                <a href="/sttenterprise/">Index</a></div>
        </li>
        <li>
            <div class="menuFuncionalidades_categoria">
                <a href="#">Cadastros</a></div>
            <div class="menuFuncionalidades_content_links">
                <div class="menuFuncionalidades_content_links_descricao">
                    <span class="menuFuncionalidades_content_links_descricao_titulo">Descrição</span>
                    <div class="menuFuncionalidades_content_links_descricao_texto">
                        Lorem Ipsum...
                    </div>
                </div>
                <div class="menuFuncionalidades_content_links_links">
                    <ul><b>Acesso Usuario</b>
                        <li><a href="#">Pesquisar</a> </li>
                        <li><a href="#">Incluir</a> </li>
                        <li><a href="#">Alterar</a> </li>
                        <li><a href="#">Consultar</a> </li>
                    </ul>
                    <ul><b>Produto</b>
                        <li><a href="#">Pesquisar</a> </li>
                        <li><a href="#">Incluir</a> </li>
                    </ul>
                    <ul><b>Perfil</b>
                        <li><a href="#">Pesquisar</a> </li>
                        <li><a href="#">Incluir</a> </li>
                    </ul>
                </div>
            </div>
        </li>
        <li>
            <div class="menuFuncionalidades_categoria">
                <a href="#">Coletores</a></div>
            <div class="menuFuncionalidades_content_links">
                <div class="menuFuncionalidades_content_links_descricao">
                    <span class="menuFuncionalidades_content_links_descricao_titulo">Descrição</span>
                    <div class="menuFuncionalidades_content_links_descricao_texto">
                        Lorem Ipsum...
                    </div>
                </div>
                <div class="menuFuncionalidades_content_links_links">
                    <ul>
                        <b>Coletor 1</b>
                        <li><a href="#">Pesquisar</a> </li>
                        <li><a href="#">Incluir</a> </li>
                    </ul>
                    <ul>
                        <b>Coletor 2</b>
                        <li><a href="#">Pesquisar</a> </li>
                        <li><a href="#">Incluir</a> </li>
                    </ul>
                    <ul>
                        <b>Coletor 3</b>
                        <li><a href="#">Pesquisar</a> </li>
                        <li><a href="#">Incluir</a> </li>
                    </ul>
                </div>
            </div>
        </li>
    </ul>
</div>

我的目标是当我点击 menuFuncionalidades_categoria 时,我关闭所有打开的 menuFuncionalidades_content_links,并打开与 处于同一级别的正确链接我点击的 menuFuncialidades_categoria。所以,我尝试了这个,但我没有成功:

$(document).ready(function () {
    $('#menuFuncionalidades > li > .menuFuncionalidades_categoria').click(function () {
        $("#menu").children().find('.menuFuncionalidades_content_links').each(function () {
            // I need a code here to close only the tags that are opened but is not the current
            if ($(this).css('display') == 'block') {
                $(this).hide();
            }
        });

        $(this).parent().find('.menuFuncionalidades_content_links').slideToggle('normal').css('width', $('#menu').css('width'));
    });
});

我错过了什么或做错了什么?

OBS:我想要的行为与 Accordion 菜单类似。

此处演示:http://fiddle.jshell.net/ry9dz/1/

最佳答案

正如@karim79 所说,您不能那样检查“显示”——它是一个 css 属性,而不是一个 html 属性。

另一方面,如果您想关闭所有其他条目,那么只需这样做 - 无需先检查它们是否可见!我还建议您对所有元素使用更高效的事件处理程序,而不是将其绑定(bind)到所有元素。使用 jQuery 1.7,这样的事情会起作用:

$(document).ready(function () {
  $("#menuFuncionalidades").on("click", ".menuFuncionalidades_categoria", function(event) {
    var selectedMenu = $(event.target).parents("li").find(".menuFuncionalidades_content_links")
      , visible = selectedMenu.is(":visible");

    // Hide all others
    $("#menuFuncionalidades .menuFuncionalidades_content_links").hide();
    // Show this one unless it was already visible
    if(!visible) {
      selectedMenu
        .slideToggle('normal')
        .css('width', $('#menu').css('width'));
    }
    // Prevent the default action
    event.preventDefault();
  });
});

关于javascript - 如何关闭所有用 jquery 打开的元素? (行为类似于 Accordion 菜单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277041/

相关文章:

javascript - 谷歌折线图划分网格线

javascript - 如何使用 Leaflet 检测多边形边缘的点击?

javascript - CSS 3D 变换只有一半可点击

javascript - 表集可见错误

html - 如何将内部缩略图定位在容器的相同位置,简单的 html 问题

javascript - Internet Explorer 10 不显示 svg 路径(d3.js 图)

javascript - 创建一个带有占位符的输入字段,该占位符在文本输入时写入

jquery - 在下拉过滤器中有两个相同级别的复选框

python - html 不发送帖子查看

javascript - 音频播放或暂停时切换图标