【问题标题】:Hide and Show list menu items using jQuery使用 jQuery 隐藏和显示列表菜单项
【发布时间】:2013-03-03 15:31:21
【问题描述】:

我有一个使用如下列表元素的简单垂直菜单

<ul id="leftNav">
    <li id="home"><a href="/index.html">Home</a>
    </li>
    <li id="apples"><a href="/category/apples.html">Apples</a>

        <ul class="subMenu">
            <li><a href="/category/red-apples.html">Red Apples</a>
            </li>
            <li><a href="/category/green-apples.html">Green Apples</a> 
            </li>
            <li><a href="/category/golden-apples.html">Golden Apples</a>
            </li>
        </ul>
    </li>
    <li id="grapes"><a href="/category/grapes.html">Grapes</a>

        <ul class="subMenu">
            <li><a href="/category/red-grapes.html">Red Grapes</a>
            </li>
            <li><a href="/category/green-grapes.html">Green Grapes</a>
            </li>
            <li><a href="/category/black-grapes.html">Black Grapes</a>
            </li>
        </ul>
    </li>
    <li id="dry-fruits"><a href="/category/dry-fruits.html">Dry Fruits</a>

        <ul class="subMenu">
            <li id="subParent1"><a href="#">Fruits That Are Dried</a>

                <ul class="subMenu1">
                    <li><a href="/category/figs.html">Figs</a>
                    </li>
                    <li><a href="/category/dates.html">Dates</a>
                    </li>
                    <li><a href="/category/pineapples.html">Pine Apples</a>
                    </li>
                </ul>
            </li>
            <li id="subParent2"><a href="#">Nuts and Seeds</a>

                <ul class="subMenu1">
                    <li><a href="/category/chestnuts.html">Chestnuts</a>
                    </li>
                    <li><a href="/category/almonds.html">Almonds</a>
                    </li>
                    <li><a href="/category/walnuts.html">Walnuts</a>
                    </li>
                </ul>
            </li>
            <li id="subParent3"><a href="/category/bananas.html">Bananas</a>
            </li>
        </ul>
    </li>
    <li id="sale" class="expanded"><a href="/category/sale.html">Sale</a>

</ul>

我想要做的是当苹果或其子项目被点击时,我试图保持列表的部分展开等等,所以当葡萄或其子项目被点击时,除了葡萄部分之外,所有其他的都应该关闭。

我尝试使用下面的代码,但由于 Apples 和 Grapes 是呈现各自页面的链接,所以下面的代码不起作用。

$(document).ready(function() {
    $("#apples .subMenu").css("display", "block");
}); 

感谢任何帮助、示例或建议。

【问题讨论】:

  • 仅供参考,您可以使用 .show() 代替 .css()。与隐藏相同:.hide()
  • 检查此jqueryui.com/accordion 并在谷歌中搜索 accordion js
  • 您要禁用&lt;a&gt; 的链接吗?您可以尝试添加event.preventDefault()
  • 所有链接的预期行为是什么?由于您所说的所有列表元素也是链接,因此单击应该只折叠它们还是什么想法?
  • 感谢大家的回复。对不起,我没有正确解释。我基本上是什么,当有人点击苹果时,他们应该进入苹果页面,并且它的子项目应该被扩展。如果单击其任何子项并转到其页面,则保持扩展。因此,如果我单击 GREEN APPLES,我应该转到 GREEN APPLES,同时扩展整个 APPLES 部分,同时折叠菜单的其余部分,也以相同的方式与其他人重复该过程,谢谢! !

标签: jquery html css menu


【解决方案1】:

您不断地重新加载页面 - 并且 javascript 也会重新加载。如果您想在请求之间保存菜单的状态,请使用 cookie。

或者这里是一个没有重新加载页面的版本——那么你必须使用 Ajax。

<script type="text/javascript">
$(document).ready(function() {

    $('#left-navigation a').click(function(){
     return false;
    });

    $(".parent-grapes > a, .parent-apples > a, .parent-dry-fruits > a").click(function () {
    var $block = $(this).parent().find(".sub-menu");
    $block.toggle();

    $.get($(this).attr('href'), function(data){
      $('#main-content').html($(data).find('#main-content').html());
    });
    return false;
    });
});
</script>

菜单只需要这个 javascript(和 JQuery)

【讨论】:

    【解决方案2】:

    试试这个。它对我有用..

    谢谢! @leo。

     <script type="text/javascript">
          $(document).ready(function() {
                hideAll();
    
                 $("#leftNav li a").click( function(e) {
                   try {
    
                      var pid = $(this).parent('li').attr("id");
                      //alert(pid);
                      if(pid == undefined) {
    
                      } else {
                        hideAll();
                        $("#" + pid + " .submenu").show();
                        e.preventDefault();
                      }
    
                   } catch(e) {
                    alert("oops!");
                   }
                });
            }); 
    
    
            function hideAll() { 
                 $(".subMenu").hide();
            }
    
      </script>
    

    【讨论】:

    • 谢谢,我会试试看会发生什么
    【解决方案3】:
      <script type="text/javascript">
          $(document).ready(function() {
             $("#apples > a").on('click',function(e){
                $('#apples .subMenu ').toggle();
                return false;
             });
          }); 
       </script>
    

    http://jsfiddle.net/makedone/WRcBa/

    【讨论】:

    • 谢谢 Makedon,我也会试试你的样品。欣赏它
    • 好的,我已经处理过了,这里是我的测试站点。如果你点击左边的导航,你可以看到我成功了 90%。我将菜单从列表更改为使用 div。我唯一卡住的地方是如果你点击干果然后点击子菜单说坚果和种子,它的子菜单就会出现,但是如果我点击核桃等子项目上的任何一个,菜单就会折叠,不确定单击第二级子项时如何保持打开状态。感谢并感谢它。预览链接是store.cotintheweb.com
    • $(document).ready(function() { $("#parent-apples .sub-menu").show(); $("a#FTAD").click(function ( e) { e.preventDefault(); var $parent = $(this).parent('.sub-menu');$parent.find(".sub-menu1").show(); $parent.find( ".sub-menu2").hide(); }); $("a#NS").click(function (e) { e.preventDefault(); var $parent = $(this).parent('.子菜单');$parent.find(".sub-menu1").hide(); $parent.find(".sub-menu2").show(); }); $("#parent-apples #subParent1").css("display", "block"); $("#parent-apples #subParent2").css("display", "block"); });
    • 我试过你的代码先生。现在如果我点击坚果和种子,什么都不会发生。你可以在我发布的链接中看到。感谢感谢您在这方面的帮助
    • 说 $parent.find 找不到
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多