Как показано в здесь: http://www.learningjquery.com/2007/03/accordion-madness. Но я нуждаюсь в помощи для редактирования его так, чтобы это работало на мои обстоятельства.
Демонстрационный HTML
JQUERY [происходящая работа]
$(document).ready(function() {
$('div#table_cantonese .chapters').hide();
$('div#table_cantonese .book').click(function() {
var $nextDiv = $(this).next();
var $visibleSiblings = $nextDiv.siblings('div:visible');
if ($visibleSiblings.length ) {
$visibleSiblings.slideUp('fast', function() {
$nextDiv.slideToggle('fast');
});
} else {
$nextDiv.slideToggle('fast');
}
});
});
Таким образом, когда конечный пользователь нажимает на div.book, div.chapters расширится. И только один div.chapters покажут за один раз. Таким образом, если div.chapters будет уже открыт, то он закроет открытый сначала прежде, чем анимировать тот, на который нажал пользователь.
Концептуально есть несколько очевидных способов добиться этого.
Уловка заключается в том, что почти все эти методы упрощаются путем применения вашего javascript к родительскому элементу всех div, которые должны вести себя при выборе.
Используйте глобальную переменную для хранения ранее открытого DIV. Затем, когда открывается новый DIV, закройте ранее открытый.
var prev=false;
//...
if(prev!==false)
// close prev
prev = new_div;