2016-07-22 2 views
0

Я использую простой аккордеон, который отлично работает, единственная необходимость - показать открытую/закрытую иконку. Не знаю, как добавить/удалить класс в родительский элемент, который будет взаимодействовать с состоянием аккордеона, поэтому вам нужна ваша помощь.Супер-простое меню аккордеона с открытием/закрытием значка

<!-- JS --> 
<script type="text/javascript"> 
$(document).ready(function($) { 
$('#accordion').find('.accordion-toggle').click(function(){ 

    //Expand or collapse this panel 
    $(this).next().slideToggle('fast'); 

    //Hide the other panels 
    $(".accordion-content").not($(this).next()).slideUp('fast'); 

}); 
}); 
</script> 

<!-- CSS --> 
<style> 
.accordion-toggle {cursor: pointer;} 
.accordion-content {display: none;} 
.accordion-content.default {display: block;} 
</style> 

<!-- HTML --> 
<div id="accordion"> 
<h4 class="accordion-toggle">Accordion 1</h4> 
<div class="accordion-content default"> 
<p>Cras malesuada ultrices augue molestie risus.</p> 
</div> 
<h4 class="accordion-toggle">Accordion 2</h4> 
<div class="accordion-content"> 
<p>Lorem ipsum dolor sit amet mauris eu turpis.</p> 
</div> 
<h4 class="accordion-toggle">Accordion 3</h4> 
<div class="accordion-content"> 
<p>Vivamus facilisisnibh scelerisque laoreet.</p> 
</div> 
</div> 
+0

вы используете JQuery UI для аккордеона? –

ответ

0

Вы упоминали скрытие/показ значков, но в конце концов, вы действительно хотели руководство о том, как:

«добавить/удалить класс на родительский элемент, который будет взаимодействовать с аккордеоном состояние»

Поэтому я предполагаю, что вы намерены использовать классы для взаимозаменяемого отображения «спящего» и «расширенного» значка на выбранный родительский элемент.

EDIT: на основе вашего разъяснения я изменил код. Пожалуйста, смотрите пример кода ниже:

$(document).ready(function($) { 
 

 
//adds the "collapsed" class to each parent 
 
$('#accordion .accordion-toggle').addClass('collapsed'); 
 

 
$('#accordion').find('.accordion-toggle').click(function(){ 
 
    //Expand or collapse this panel 
 
    $(this).next().slideToggle('fast'); 
 
    
 
    //toggles between collapsed and expanded classes 
 
$(this).toggleClass('collapsed expanded'); 
 
    
 
    //removes any instance of "expanded" from the other parents and replace it with the "collapsed" class 
 
    $("#accordion .accordion-toggle").not($(this)).removeClass('expanded').addClass('collapsed'); 
 
    
 
    //Hide the other panels 
 
    $(".accordion-content").not($(this).next()).slideUp('fast'); 
 

 
}); 
 
});
.expanded { 
 
    background:red; 
 
} 
 

 
.collapsed { 
 
    background:blue; 
 
} 
 
.accordion-content:not(.default) { 
 
    display:none; 
 
} 
 
h4 { 
 
    cursor:pointer; 
 
} 
 
/* the css below is unnecessary for the accordion, but just to prevent the vertical scrollbars from showing up using stackoverflow's code screen */ 
 
body { 
 
    overflow:hidden; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="accordion"> 
 
<h4 class="accordion-toggle">Accordion 1</h4> 
 
<div class="accordion-content default"> 
 
<p>Cras malesuada ultrices augue molestie risus.</p> 
 
</div> 
 
<h4 class="accordion-toggle">Accordion 2</h4> 
 
<div class="accordion-content"> 
 
<p>Lorem ipsum dolor sit amet mauris eu turpis.</p> 
 
</div> 
 
<h4 class="accordion-toggle">Accordion 3</h4> 
 
<div class="accordion-content"> 
 
<p>Vivamus facilisisnibh scelerisque laoreet.</p> 
 
</div> 
 
</div>

+0

Спасибо за ваше время. Проверьте ваш пример, и я вижу, что расширенный/свернутый класс не изменяется, когда я нажимаю на один и тот же родительский элемент. – LifeIsShort

+0

Я только что проверил скрипку, и она отлично работает с моего конца. Может быть, проблема связана с визуальным сигналом? Таким образом, я добавил дополнительный стиль, который изменяет курсор на зависание над родительским элементом. Вот скрипка: https://jsfiddle.net/0ggq6w77/3/ – Noel

+0

Пожалуйста, позвольте мне объяснить, у нас есть три вкладки: Аккордеон 1, Аккордеон 2, Аккордеон 3. Если мы открываем и закрываем один и тот же Аккордеон 1 несколько раз, класс doesn 't change, он по-прежнему остается

. Не могли бы вы изменить его, поэтому каждый раз, когда мы открываем/закрываем хотя бы одну и ту же вкладку аккордеона, класс изменится с расширенного на рутинное? Теперь класс изменяется только при открытии другой вкладки. – LifeIsShort