jQuery UI フォーラムで議論されているように、これにはアコーディオンを使用しないでください。
アコーディオンのように見えて機能するものが必要な場合は、それで問題ありません。それらのクラスを使用してスタイルを設定し、必要な機能を実装します。次に、それらをすべて開いたり閉じたりするボタンを追加するのは非常に簡単です。例
HTML
jquery-ui クラスを使用することで、アコーディオンを「本物の」アコーディオンのように見せることができます。
<div id="accordion" class="ui-accordion ui-widget ui-helper-reset">
<h3 class="accordion-header ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-corner-all">
<span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-e"></span>
Section 1
</h3>
<div class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom">
Content 1
</div>
</div>
自分のアコーディオンを巻く
ほとんどの場合、アコーディオン ヘッダーで次の兄弟 (コンテンツ領域) の状態を切り替えたいだけです。また、後でフックする 2 つのカスタム イベント "show" と "hide" を追加しました。
var headers = $('#accordion .accordion-header');
var contentAreas = $('#accordion .ui-accordion-content ').hide();
var expandLink = $('.accordion-expand-all');
headers.click(function() {
var panel = $(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;
});
すべて展開/折りたたむ
ボタンが変更されたことをマークするためにブール値isAllOpen
フラグを使用します。これは、より大きなプラグイン フレームワークのクラスまたは状態変数である可能性があります。
expandLink.click(function(){
var isAllOpen = $(this).data('isAllOpen');
contentAreas[isAllOpen? 'hide': 'show']()
.trigger(isAllOpen? 'hide': 'show');
});
「全開」時にボタンを入れ替える
カスタムの「表示」および「非表示」イベントのおかげで、パネルが変更されたときに何かをリッスンできます。唯一の特別なケースは「すべて開いているか」です。はいの場合、ボタンは「すべて折りたたむ」にする必要があります。そうでない場合は、「すべて展開する」にする必要があります。
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('Collapse 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('Expand all')
.data('isAllOpen', false);
}
}
});
コメントの編集:
「すべて展開」ボタンを押さない限り、「1つのパネルのみを開く」を維持する方が実際にははるかに簡単です。例