#jquery #jquery-selectors
#jquery #jquery-селекторы
Вопрос:
Я расширяю и сворачиваю divs. Я также разрешаю развернуть все и свернуть все. Проблема в том, что если div уже развернут, когда пользователь нажимает развернуть все, расширенный div будет свернут, в то время как другие divs будут расширяться (и наоборот). Как я могу развернуть все подразделения, которые еще не развернуты, и свернуть все подразделения, которые еще не свернуты.
$(document).ready(function(){
$(".toggle_container").hide();
//Expand/Collapse Individual Boxes
$("span.expand_heading").toggle(function(){
$(this).addClass("active");
}, function () {
$(this).removeClass("active");
});
$("span.expand_heading").click(function(){
$(this).nextAll(".toggle_container:first").slideToggle("slow");
});
//Show hide 'expand all' and 'collapse all' text
$(".expand_all").toggle(function(){
$(this).addClass("expanded");
}, function () {
$(this).removeClass("expanded");
});
//expand or collapse all boxes
$(".expand_all").click(function(){
$(".toggle_container").slideToggle("slow");
});
});
Ответ №1:
//expand or collapse all boxes
$(".expand_all").click(function(){
if($(this).hasClass("expanded")){
$(".toggle_container").slideDown("slow");
}
else {
$(".toggle_container").slideUp("slow");
}
});
Вы можете проверить, имеет ли ваш элемент expand_all расширенный класс или нет, и сдвинуть все ваши элементы вверх или вниз в зависимости.
Ответ №2:
попробуйте ограничить свой селектор только скрытыми значениями:
$(".toggle_container:hidden").slideToggle("slow");
Ответ №3:
.slideDown() и .slideUp() должны делать.
Ответ №4:
Более эффективным и действенным способом сделать это было бы следующее:
$(document).ready(function ()
{
var panels = $('.panel-collapse.collapse');
var collapse = function()
{
if (!$(this).hasClass ('open')) return;
$(this).slideUp().removeClass('open').removeClass('active');
};
$(".panel-heading").click (function()
{
var next = $(this).next();
if (next.hasClass ('active')) return;
panels.each (collapse);
next.slideToggle().toggleClass('open').addClass('active');
});
});
Этот подход учитывает следующие моменты:
- Храните сворачиваемые панели в переменной
panels
, чтобы нам не нужно было искать их каждый раз при нажатии на заголовок. - При нажатии на заголовок, если его панель уже открыта, нам ничего не нужно делать.
- При сбросе панелей при каждом нажатии мы закрываем только открытые и игнорируем остальные.