调整手风琴以处理多个实例
Adjust accordion to work with multiple instances
我使用的是带有collapse/hide-all选项的jQuery手风琴,它只适用于一个实例。一旦放入第二个(甚至更多)实例,脚本就会切换所有手风琴上的所有面板,因为它不知道应该区分不同的手风琴进行切换。有没有一种简单的方法可以让脚本识别切换按钮是在什么手风琴上使用的?可能是通过临时身份证?
HTML
<h2>First accordion</h2>
<div class="accordion">
<a class="toggle_open" id="button_toggle">Toggle all</a>
<h5>Which is the first question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>What is the second question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>And the third?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
</div>
<h2>Second accordion</h2>
<div class="accordion">
<a class="toggle_open" id="button_toggle">Toggle all</a>
<h5>Which is another question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>What is the next-to-another question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>Tell me about the last!</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
</div>
CSS
.accordion {
.accordion_text {
display: none;
}
}
JS
jQuery('document').ready(function(){
/* Accordion for pages */
var headers = jQuery('.accordion h5');
var contentAreas = jQuery('.accordion_text').hide();
var expandLink = jQuery('.toggle_open');
// add the accordion functionality
headers.click(function() {
var panel = jQuery(this).next();
var isOpen = panel.is(':visible');
// open or close as necessary
panel[isOpen? 'slideUp': 'slideDown']()
// trigger the correct custom event
.trigger(isOpen? 'hide': 'show');
// stop the link from causing a pagescroll
return false;
});
// hook up the expand/collapse all
expandLink.click(function(){
var isAllOpen = jQuery(this).data('isAllOpen');
contentAreas[isAllOpen? 'hide': 'show']()
.trigger(isAllOpen? 'hide': 'show');
});
// when panels open or close, check to see if they're all open
contentAreas.on({
// whenever we open a panel, check to see if they're all open
// if all open, swap the button to collapser
show: function(){
var isAllOpen = !contentAreas.is(':hidden');
if(isAllOpen){
expandLink.text('Hide all')
.data('isAllOpen', true);
}
},
// whenever we close a panel, check to see if they're all open
// if not all open, swap the button to expander
hide: function(){
var isAllOpen = !contentAreas.is(':hidden');
if(!isAllOpen){
expandLink.text('Collapse all')
.data('isAllOpen', false);
}
}
});
});
您可以在上找到此代码示例http://codepen.io/enoversum/pen/EKQmeL
以下内容可能会对您有所帮助。
您可以使用closest()
函数获取父.accordion
,然后使这些函数仅对子级生效。
jQuery('document').ready(function() {
/* Accordion for pages */
var headers = jQuery('.accordion h5');
var contentAreas = jQuery('.accordion_text').hide();
var expandLink = jQuery('.toggle_open');
// add the accordion functionality
headers.click(function() {
var panel = jQuery(this).next();
var isOpen = panel.is(':visible');
// open or close as necessary
panel[isOpen ? 'slideUp' : 'slideDown']()
// trigger the correct custom event
.trigger(isOpen ? 'hide' : 'show');
// stop the link from causing a pagescroll
return false;
});
// hook up the expand/collapse all
expandLink.click(function() {
var isAllOpen = jQuery(this).data('isAllOpen');
$(this).closest('.accordion').find(contentAreas)[isAllOpen ? 'hide' : 'show']()
.trigger(isAllOpen ? 'hide' : 'show');
});
// when panels open or close, check to see if they're all open
contentAreas.on({
// whenever we open a panel, check to see if they're all open
// if all open, swap the button to collapser
show: function() {
var isAllOpen = !$(this).is(':hidden');
if (isAllOpen) {
$(this).closest('.accordion').find('.toggle_open').text('Hide all')
.data('isAllOpen', true);
}
},
// whenever we close a panel, check to see if they're all open
// if not all open, swap the button to expander
hide: function() {
var isAllOpen = !$(this).is(':hidden');
if (!isAllOpen) {
$(this).closest('.accordion').find('.toggle_open').text('Collapse all')
.data('isAllOpen', false);
}
}
});
});
.accordion {
.accordion_text {
display: none;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<h2>First accordion</h2>
<div class="accordion">
<a class="toggle_open" id="button_toggle">Toggle all</a>
<h5>Which is the first question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>What is the second question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>And the third?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
</div>
<h2>Second accordion</h2>
<div class="accordion">
<a class="toggle_open" id="button_toggle">Toggle all</a>
<h5>Which is another question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>What is the next-to-another question?</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
<h5>Tell me about the last!</h5>
<div class="accordion_text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima adipisci natus quas quod doloremque, dolore aliquid, blanditiis eligendi nemo cum tenetur earum. Suscipit ea enim consequuntur vero totam, impedit veritatis.</p>
</div>
</div>
相关文章:
- 如何通过osascript处理同一应用程序的两个实例
- 在Flux中处理同一组件的多个实例
- 调整手风琴以处理多个实例
- 处理Twitter Flight组件的多个实例的事件
- 当有多个 React.js 组件实例具有数据请求时如何处理缓存
- 具有不同回调处理程序的单一实例 Websockets 对象
- 如何在jQuery中处理单个类的多个实例
- 尝试重置视差.js以处理视差情况的一些实例
- 主干/Dropzone:如何正确处理Dropzone实例
- Javascript:当事件处理程序是对象的多个实例时,如何从事件处理程序中获得正确的对象实例
- 处理多个组件实例的回调
- JavaScript:防止JavaScript对象的多个实例在完成后被处理
- 不知道如何在这个特定的实例中处理javascript和mechanize
- 实例化app模块失败.处理步骤为什么
- JqueryUI对话框打开处理onclick事件与旧的目标实例
- 如何仅删除实例中添加的事件处理程序
- 如何从JWPlayer实例中删除事件处理程序
- jQuery Validate将错误作为单独的实例处理,而不是将它们组合在一起
- 处理集合的多个实例
- 我如何修改一个模板实例从一个事件处理程序在流星没有会话