Javascript 使用jQuery创建扩展列表时遇到问题

Javascript 使用jQuery创建扩展列表时遇到问题,javascript,jquery,html,list,parent-child,Javascript,Jquery,Html,List,Parent Child,我需要为我的客户的podcast归档页面创建一个列表,打开该页面可以显示他们所点击月份的不同podcast的链接。我非常希望页面右侧的默认博客存档小部件与BlogSpot完全相同: 我可以在这里制作这样的东西:但我不知道如何制作箭头来显示列表是否已展开。因此,它需要在单击时更改方向,并在再次单击时返回到上一个方向以关闭该部分 我的版本也有我打开页面时显示的子元素,我不希望它们在单击父元素之前展开 我已经在网上查看是否已经创建了jQuery来完成这项工作,或者我如何才能做到这一点,但由于我不确定这

我需要为我的客户的podcast归档页面创建一个列表,打开该页面可以显示他们所点击月份的不同podcast的链接。我非常希望页面右侧的默认博客存档小部件与BlogSpot完全相同:

我可以在这里制作这样的东西:但我不知道如何制作箭头来显示列表是否已展开。因此,它需要在单击时更改方向,并在再次单击时返回到上一个方向以关闭该部分

我的版本也有我打开页面时显示的子元素,我不希望它们在单击父元素之前展开

我已经在网上查看是否已经创建了jQuery来完成这项工作,或者我如何才能做到这一点,但由于我不确定这整件事的标题是否正确,我得到的结果好坏参半。任何帮助都将不胜感激

试试jqueryui

,或:

只需根据自己的喜好编写CSS

试试jqueryui

,或:

只需根据自己的喜好编写CSS

试试jqueryui

,或:

只需根据自己的喜好编写CSS

试试jqueryui

,或:


只需根据自己的喜好编写CSS

如果你想自己写(自己写东西很有趣):

我已将
#tree
的ID添加到根
    ,并将级别1
  • 的文本包装在
    中:

    要在页面加载时隐藏所有子元素

    $('#tree > li').addClass('closed');
    // hide the level 2 ul's
    $('#tree > li ul').hide();
    
    然后在单击处理程序中:

    $("#tree > li > span").click(function (event) {
        event.preventDefault();
        // swap the opened and closed classes
        $(this).parent().toggleClass('opened closed');
         // toggle the level 2 ul instead of li
        $(this).parent().find("ul").toggle();
    });
    
    在此进行工作演示:


    附加:

    此演示代码没有使用缓存对jQuery对象的引用来简化阅读。在现实中,而不是做:

    $(this).parent().toggleClass('opened closed');
    $(this).parent().find("ul").toggle();
    
    。。。我们应该:

    var parent = $(this).parent(); // search the DOM once for this' parent, and remember it
    parent.toggleClass('opened closed');
    parent.find("ul").toggle();
    

    。。因为每次使用jQuery的$()构造函数时,它都需要搜索整个DOM,如果您重复执行,这可能会非常昂贵。

    如果您想自己执行此操作(自己编写东西很有趣):

    我已将
    #tree
    的ID添加到根
      ,并将级别1
    • 的文本包装在
      中:

      要在页面加载时隐藏所有子元素

      $('#tree > li').addClass('closed');
      // hide the level 2 ul's
      $('#tree > li ul').hide();
      
      然后在单击处理程序中:

      $("#tree > li > span").click(function (event) {
          event.preventDefault();
          // swap the opened and closed classes
          $(this).parent().toggleClass('opened closed');
           // toggle the level 2 ul instead of li
          $(this).parent().find("ul").toggle();
      });
      
      在此进行工作演示:


      附加:

      此演示代码没有使用缓存对jQuery对象的引用来简化阅读。在现实中,而不是做:

      $(this).parent().toggleClass('opened closed');
      $(this).parent().find("ul").toggle();
      
      。。。我们应该:

      var parent = $(this).parent(); // search the DOM once for this' parent, and remember it
      parent.toggleClass('opened closed');
      parent.find("ul").toggle();
      

      。。因为每次使用jQuery的$()构造函数时,它都需要搜索整个DOM,如果您重复执行,这可能会非常昂贵。

      如果您想自己执行此操作(自己编写东西很有趣):

      我已将
      #tree
      的ID添加到根
        ,并将级别1
      • 的文本包装在
        中:

        要在页面加载时隐藏所有子元素

        $('#tree > li').addClass('closed');
        // hide the level 2 ul's
        $('#tree > li ul').hide();
        
        然后在单击处理程序中:

        $("#tree > li > span").click(function (event) {
            event.preventDefault();
            // swap the opened and closed classes
            $(this).parent().toggleClass('opened closed');
             // toggle the level 2 ul instead of li
            $(this).parent().find("ul").toggle();
        });
        
        在此进行工作演示:


        附加:

        此演示代码没有使用缓存对jQuery对象的引用来简化阅读。在现实中,而不是做:

        $(this).parent().toggleClass('opened closed');
        $(this).parent().find("ul").toggle();
        
        。。。我们应该:

        var parent = $(this).parent(); // search the DOM once for this' parent, and remember it
        parent.toggleClass('opened closed');
        parent.find("ul").toggle();
        

        。。因为每次使用jQuery的$()构造函数时,它都需要搜索整个DOM,如果您重复执行,这可能会非常昂贵。

        如果您想自己执行此操作(自己编写东西很有趣):

        我已将
        #tree
        的ID添加到根
          ,并将级别1
        • 的文本包装在
          中:

          要在页面加载时隐藏所有子元素

          $('#tree > li').addClass('closed');
          // hide the level 2 ul's
          $('#tree > li ul').hide();
          
          然后在单击处理程序中:

          $("#tree > li > span").click(function (event) {
              event.preventDefault();
              // swap the opened and closed classes
              $(this).parent().toggleClass('opened closed');
               // toggle the level 2 ul instead of li
              $(this).parent().find("ul").toggle();
          });
          
          在此进行工作演示:


          附加:

          此演示代码没有使用缓存对jQuery对象的引用来简化阅读。在现实中,而不是做:

          $(this).parent().toggleClass('opened closed');
          $(this).parent().find("ul").toggle();
          
          。。。我们应该:

          var parent = $(this).parent(); // search the DOM once for this' parent, and remember it
          parent.toggleClass('opened closed');
          parent.find("ul").toggle();
          

          。。因为每次使用jQuery的$()构造函数时,它都需要搜索整个DOM,如果重复使用,可能会非常昂贵。

          您需要的是一个手风琴。使用jQuery创建手风琴菜单非常简单。网上有很多教程。你也可以看看插件。看看异步树演示。你要找的是手风琴。使用jQuery创建手风琴菜单非常简单。网上有很多教程。你也可以看看插件。看看异步树演示。你要找的是手风琴。使用jQuery创建手风琴菜单非常简单。网上有很多教程。你也可以看看插件。看看异步树演示。你要找的是手风琴。使用jQuery创建手风琴菜单非常简单。网上有很多教程。你也可以看看插件。查看异步树演示。我喜欢自己编写它的想法,但是当我尝试您的建议时,一切都消失了,因为.hide()也应用于父元素,我也无法显示箭头(我自己制作了箭头以供使用)更新的答案,请参阅fiddle for working demo。请随意修改CSS以更改外观,或者修改Javascript以适应更多嵌套层(如果需要)。我喜欢自己编写的想法,但当我尝试您的建议时,一切都消失了,因为.hide()也应用于父元素,我也无法显示箭头(我自己制作了箭头以供使用)更新的答案,请参阅小提琴工作演示。请随意修改CSS以更改外观,或者修改Javascript以适应更多嵌套层(如果需要)。我喜欢自己编写的想法,但当我尝试您的建议时,一切都消失了,因为.hide()也应用于父元素,我也无法显示箭头(我自己制作了箭头以供使用)更新答案,请参阅