简体   繁体   English

嵌套引导折叠(手风琴)

[英]Nested Bootstrap Collapse (Accordion)

I'm implementing Bootstrap 3.3.7 Collapse (accordion).我正在实施 Bootstrap 3.3.7 Collapse(手风琴)。 I did copy the example here .我确实复制了这里的例子。

I modified the panel-title part by adding caret and moving the text out of anchor so that only caret would clickable that would respond to the collapse event:我通过添加插入符并将文本移出锚点来修改面板标题部分,以便只有插入符可单击以响应折叠事件:

<h4 class="panel-title">
    <a class="collapsed" role="button" data-toggle="collapse" data-parent="#sub-role-1_sub-role-1-accordion" href="#collapse-sub-role-1_sub-role-1" aria-expanded="true" aria-controls="collapse-sub-role-1_sub-role-1">
        <span class="caret caret-mr"></span>
    </a>Sub Role 1
</h4>

I also added custom JS and CSS to make caret go up (dropup) when clicked to collapse:我还添加了自定义 JS 和 CSS 以在单击折叠时使插入符 go 向上(下拉):

var collapseList = $('.panel .panel-collapse');
collapseList.each(function() {
    var collapseId = $(this).attr('id');
    $('#' + collapseId).on('show.bs.collapse', function() {
        $(this).prev('.panel-heading').find('.panel-title > a').addClass('dropup');
    }).on('hide.bs.collapse', function() {
        $(this).prev('.panel-heading').find('.panel-title > a').removeClass('dropup');
    });
});

.panel .panel-heading>.panel-title>a>span.caret {
    border-top: 6px solid black;
}

.panel .panel-heading>.panel-title>a.dropup>span.caret {
    border-bottom: 6px solid black;
    border-top: none;
}

I've changed all the IDs and all others data-attributes to avoid conflicts.我已经更改了所有 ID 和所有其他数据属性以避免冲突。

This perfectly works except for nested accordion (accordion inside an accordion body).除了嵌套手风琴(手风琴体内的手风琴)之外,这非常有效。 Currently, I have three levels of nested accordion.目前,我有三层嵌套手风琴。 The problem is that the nested accordion affects also the parent up to the root accordion - their carets also go dropup or dropdown.问题是嵌套的手风琴也会影响到根手风琴的父级 - 他们的插入符号也是 go 下拉菜单或下拉菜单。 The second accordion (nested) affects the first, the third affects the second and first.第二个手风琴(嵌套)影响第一个,第三个影响第二个和第一个。

Complete codes: GitHub Gist完整代码: GitHub 要点

Thanks for help.感谢帮助。

collapseList.each(function() {
var collapseId = $(this).attr('id');
$('#' + collapseId).on('show.bs.collapse', function() {
    $(this).closest('.panel').find('.panel-heading').find('.panel-title > a').addClass('dropup');
}).on('hide.bs.collapse', function() {
    $(this).prev('.panel-heading').find('.panel-title > a').removeClass('dropup');
});
 });

You can try this , if not fixed please share the html code for panel you have written. 您可以试试看,如果不固定,请分享您编写的面板的html代码。

Update 2021 2021 年更新

The original answers are out-of-date.原始答案已过时。 With the latest Bootstrap 5 , accordion behavior can be acheived by simply using the data-bs-parent= attribute on the sibling Collapse elements...使用最新的Bootstrap 5手风琴行为可以通过简单地在同级 Collapse 元素上使用data-bs-parent=属性来实现...

Nested accordions can be placed inside another Collapse element which then becomes the data-bs-parent= of the nested children.嵌套手风琴可以放置在另一个 Collapse 元素内,然后成为嵌套子级的data-bs-parent=

<div id="accordion">
        <div class="card">
            <div class="card-header" id="headingOne">
                <h5 class="mb-0 d-inline">
                    <button class="btn btn-link" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Collapse #1 </button>
                </h5>
            </div>
            <div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-bs-parent="#accordion">
                <div class="card-body" id="child1">
                    <div class="card">
                        <div class="card-header">
                            <a href="#" data-bs-toggle="collapse" data-bs-target="#collapseOneA">Child A</a>
                        </div>
                        <div class="card-body collapse" data-bs-parent="#child1" id="collapseOneA"> ... </div>
                    </div>
                    <div class="card">
                        <div class="card-header">
                            <a href="#" data-bs-toggle="collapse" data-bs-target="#collapseOneB">Child B</a>
                        </div>
                        <div class="card-body collapse" data-bs-parent="#child1" id="collapseOneB"> ... </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="card">
            <div class="card-header" id="headingTwo">
                <h5 class="mb-0">
                    <button class="btn btn-link collapsed" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"> Collapse #2 </button>
                </h5>
            </div>
            <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-bs-parent="#accordion">
                <div class="card-body"> ... </div>
            </div>
        </div>
        <div class="card">
            <div class="card-header" id="headingThree">
                <h5 class="mb-0">
                    <button class="btn btn-link collapsed" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree"> Collapse #3 </button>
                </h5>
            </div>
            <div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-bs-parent="#accordion">
                <div class="card-body"> ... </div>
            </div>
        </div>
    </div>

Bootstrap 5 Nested Accordion Bootstrap 5 嵌套手风琴

 span[aria-expanded="true"] i::before { content: "\\f106"; } .uner { margin: 0 50px 15px; } #collapse1 { border:1px solid #dedede; border-top:0px; } 
 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <h2>Accordion Example</h2> <p><strong>Note:</strong> The <strong>data-parent</strong> attribute makes sure that all collapsible elements under the specified parent will be closed when one of the collapsible item is shown.</p> <div class="panel-group" id="accordion"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a>Collapsible Group 1</a> <span class="pull-right" data-toggle="collapse" data-parent="#accordion" href="#collapse1"><i class="fa fa-angle-down"></i></span> </h4> </div> </div> <div id="collapse1" class="panel-collapse collapse in"> <div class="panel-body"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a>Sub Collapsible Group 1.1</a> <span class="pull-right" data-toggle="collapse" data-parent="#accordion" href="#collapse2"><i class="fa fa-angle-down"></i></span> </h4> </div> </div> <div id="collapse2" class="panel-collapse collapse"> <div class="panel-body"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p></div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a>Sub Collapsible Group 1.2</a> <span class="pull-right" data-toggle="collapse" data-parent="#accordion" href="#collapse3"><i class="fa fa-angle-down"></i></span> </h4> </div> </div> <div id="collapse3" class="panel-collapse collapse"> <div class="panel-body"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p></div> </div> </div> </div> </div> </div> </body> </html> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM