I have a bootstrap accordion setup and working fine.
I need to have links on external pages which will:
A) Take you to the specified panel within the accordion
B) Open the specified panel
The link structure needs to be in this format (example):
Page.html#collapseTwo
(the ‘collapseTwo’ will change, of course, depending on the panel)
The HTML:
JavaScript
x
97
97
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
2
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
3
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
4
<div class="container"
5
id="page_container">
6
<div id="accordion_search_bar_container">
7
<input type="search"
8
id="accordion_search_bar"
9
placeholder="Search"/>
10
</div>
11
<div class="panel-group"
12
id="accordion"
13
role="tablist"
14
aria-multiselectable="true">
15
<div class="panel panel-success"
16
id="collapseOne_container">
17
<div class="panel-heading"
18
role="tab"
19
id="headingOne">
20
<h4 class="panel-title">
21
<a role="button"
22
data-toggle="collapse"
23
data-parent="#accordion"
24
href="#collapseOne"
25
aria-expanded="true"
26
aria-controls="collapseOne">
27
One
28
</a>
29
</h4>
30
</div>
31
<div id="collapseOne"
32
class="panel-collapse collapse in"
33
role="tabpanel"
34
aria-labelledby="headingOne">
35
<div class="panel-body">
36
<p>Pellentesque convallis dolor</p>
37
<p>Enim at tincidunt magna dapibus vitae</p>
38
</div>
39
</div>
40
</div>
41
<div class="panel panel-primary"
42
id="collapseTwo_Container">
43
<div class="panel-heading"
44
role="tab"
45
id="headingTwo">
46
<h4 class="panel-title">
47
<a class="collapsed"
48
role="button"
49
data-toggle="collapse"
50
data-parent="#accordion"
51
href="#collapseTwo"
52
aria-expanded="false"
53
aria-controls="collapseTwo">
54
Two
55
</a>
56
</h4>
57
</div>
58
<div id="collapseTwo"
59
class="panel-collapse collapse in"
60
role="tabpanel"
61
aria-labelledby="headingTwo">
62
<div class="panel-body">
63
<p>Vestibulum in laoreet nisi</p>
64
<p>Sit amet placerat massa</p>
65
</div>
66
</div>
67
</div>
68
<div class="panel panel-danger"
69
id="collapseThree_Container">
70
<div class="panel-heading"
71
role="tab"
72
id="headingThree">
73
<h4 class="panel-title">
74
<a class="collapsed"
75
role="button"
76
data-toggle="collapse"
77
data-parent="#accordion"
78
href="#collapseThree"
79
aria-expanded="false"
80
aria-controls="collapseThree">
81
Three
82
</a>
83
</h4>
84
</div>
85
<div id="collapseThree"
86
class="panel-collapse collapse in"
87
role="tabpanel"
88
aria-labelledby="headingThree">
89
<div class="panel-body">
90
<p>Curabitur sem eros tempor sit</p>
91
<p>Amet nunc eget, gravida mollis</p>
92
</div>
93
</div>
94
</div>
95
</div>
96
</div>
97
The JS:
JavaScript
1
17
17
1
(function() {
2
var searchTerm, panelContainerId;
3
// Create a new contains that is case insensitive
4
$.expr[':'].containsCaseInsensitive = function(n, i, m) {
5
return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
6
};
7
8
$('#accordion_search_bar').on('change keyup paste click', function() {
9
searchTerm = $(this).val();
10
$('#accordion > .panel').each(function() {
11
panelContainerId = '#' + $(this).attr('id');
12
$(panelContainerId + ':not(:containsCaseInsensitive(' + searchTerm + '))').hide();
13
$(panelContainerId + ':containsCaseInsensitive(' + searchTerm + ')').show();
14
});
15
});
16
}());
17
Advertisement
Answer
You can use url parameters
and do it.
Sample links:
https://output.jsbin.com/talojodupa/1?panel=collapseOne
https://output.jsbin.com/talojodupa/1?panel=collapseTwo
jsbin link: https://jsbin.com/talojodupa/1/edit?html,js,output
JavaScript
1
38
38
1
(function() {
2
var searchTerm, panelContainerId;
3
// Create a new contains that is case insensitive
4
$.expr[':'].containsCaseInsensitive = function(n, i, m) {
5
return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
6
};
7
8
$('#accordion_search_bar').on('change keyup paste click', function() {
9
searchTerm = $(this).val();
10
$('#accordion > .panel').each(function() {
11
panelContainerId = '#' + $(this).attr('id');
12
$(panelContainerId + ':not(:containsCaseInsensitive(' + searchTerm + '))').hide();
13
$(panelContainerId + ':containsCaseInsensitive(' + searchTerm + ')').show();
14
});
15
});
16
17
/* Function to get url parameter based on param name */
18
function getUrlParameter(key) {
19
key = key.replace(/[[]/, "\[").replace(/[]]/, "\]");
20
var regex = new RegExp("[\?&]" + key + "=([^&#]*)");
21
var results = regex.exec(window.location.href);
22
if (results == null)
23
return "";
24
else
25
return unescape(results[1]).replace(/<script.*>.*</script>/g, "");
26
}
27
28
var panelId = getUrlParameter('panel');
29
if(panelId){
30
var $panel = $('#'+panelId);
31
$panel.addClass('in');
32
33
$('html,body').animate({
34
scrollTop: $panel.offset().top},
35
'slow');
36
}
37
38
}());