【问题标题】:jQuery ui accordion - different collapse panel?jQuery ui 手风琴 - 不同的折叠面板?
【发布时间】:2016-07-25 10:32:35
【问题描述】:

我在其他问题上找不到我要寻找的东西,所以就这样吧。

这是我使用 jQuery UI 制作的手风琴代码

    $('.blog-m-post').accordion({
      header: "h3",
      active: "true"
    });

我的问题是docs 状态

内容面板必须是紧随其关联的同级面板 标题。

但是对于我的标记,内容面板不是紧跟在标题之后,而是紧随其后。

例子:

<div class="blog-m-post">
  <h3>My blog post title</h3>

  <div class="foo"> <!-- this becomes the collapsed element -->
    <p>Posted on: 8th Aug</p> <p>Author: John Doe</p>
  </div>

  <div class="content"> <!-- but I want THIS to collapse instead -->
    <p>my content inside here</p>
  </div>
</div>

如何使 .content 成为当前的可折叠元素,它是 .foo

.foo 在排序方面需要保持原位,因为它需要默认显示。 .content 是内部内容应该折叠和打开的位置。

【问题讨论】:

    标签: javascript jquery html css jquery-ui


    【解决方案1】:

    您可以将&lt;div class="foo"&gt;&lt;/div&gt; 放在 HEADER-div 中,然后 将 &lt;div class="content"&gt; 保留为该 HEADER 的直接兄弟。

    例如:

     <div class="blog-m-post">
          <div class="header">
            <h3>My blog post title</h3>
            <div class="foo"> <!-- this becomes the collapsed element -->
              <p>Posted on: 8th Aug</p> <p>Author: John Doe</p>
            </div>
          </div>
    
          <div class="content"> <!-- but I want THIS to collapse instead -->
            <p>my content inside here</p>
          </div>
     </div>
    

    JQuery 将是:

    $('.blog-m-post').accordion({
          header: "div.header",
          active: "true"
    });
    

    Here is the JsFiddle

    【讨论】:

    • 效果很好,只是它不会重新折叠备份?
    • @AshleyBrown 这就是手风琴。但是有某些配置选项。只需添加“可折叠:真实”即可实现这一目标。检查这个更新的小提琴-jsfiddle.net/onjconLw/3
    【解决方案2】:

    作为docs 状态:

    您的手风琴容器的标记需要成对的标题和 内容面板

    还有(如你所知)

    内容面板必须是紧随其关联的同级面板 标题。

    因此,您必须将每个标题与相关内容配对,以使其/它们可折叠。在手风琴内部有一个额外的元素并且始终可见需要相当多的技巧,我建议使用切换。无论如何,在手风琴中,一个解决方案是在创建后附加额外的内容,当激活删除它时,刷新并再次附加。最终,是这样的:

    $('.blog-m-post').accordion({
          header: "h3",
          active: "true",
          collapsible: true,      
          create: function(){
              $('h3').after('<div class="extra content ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active"><div class="foo">Foo content here</div></div>');        
          },
          activate: function( event, ui ) {
            $('.extra').remove();
            $( ".blog-m-post" ).accordion( "refresh" );
            if(ui.newHeader.length==1){//open
              $('.foo').remove();
              $('.content').prepend('<div class="foo">Foo content here</div>')        
            }else{
              $('h3').after('<div class="extra content ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active"><div class="foo">Foo content here</div></div>');    
            }    
          }
        });
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
    <link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
    <div class="blog-m-post">
      
      <h3>Accordion</h3>
      
      <div class="content">
        <p>my content inside here</p>
      </div>
      
    </div>

    【讨论】:

    • 我不确定这是什么类型的答案......这不是一个真正的答案。我知道文档说什么,这篇文章的重点是尝试绕过默认行为。
    • 更新了答案,看看collapsible: truetoggle()如何满足你的需求,以防给定的sn-p不合适。
    • 不,因为正如我在问题中所述,.foo 必须保持当前顺序。它应该是这样的:标题-> 发布元数据(作者、发布日期、cmets 数量)-> 折叠/展开面板。本质上,我当前的标记会将帖子的日期、作者和“喜欢”放在标题下方。这个手风琴就像一篇博客文章。
    • 你说得对,Asley,在我的更新答案中了解如何使用 activate 来实现这一目标
    • 这是一个很好的答案。不幸的是,我实际上在.foo 的某些部分运行了PHP,以循环输出该数据。整个手风琴实际上是在博客文章循环中。您的解释会起作用,但附加/前置不适用于我所拥有的,但这是我没有提及 php 的错。
    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 2011-10-01
    • 2012-11-21
    • 2021-07-07
    • 2012-04-26
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多