Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Как добавить и удалить класс в аккордеоне?

#javascript #jquery

                    
Каким образом можно добавить класс, чтобы для него присвоить знак открытой-закрытой
вкладки? Сложность в том, что везде коды сильно отличаются.
Пример
Код скрипта.  

jQuery(function($){
    $('.multi-accordion li > a').on('click', function (event) {
        var $this = $(this), $next = $this.next();
        if ($next.length) {
        $next.toggle().parent().toggleClass('opened').siblings().children('ul').filter(':visible').toggle();
        event.preventDefault();
        }
    });
});


Ответы

Ответ 1



$('.multi-accordion li > a').next().parent().addClass('has-children') Первая строка отвечает за выборку li > a в блоке с классом multi-accordion и для тех, кто является родителем присваивается класс has-children. $('.multi-accordion .has-children > a').click(function(e) { var li = $(this).parent();//получаем сам li //ищем все элементы на этом уровне и ниже с классом open, который показывает, что элемент раскрыт li.parent('ul').find('.open') //добавляем текущий элемент если он до этого был схлопнут .add(li) //меняем состояние классов has-children и open у выбранных элементов .toggleClass('has-children open'); // запрещаем поведение по умолчанию, конкретно здесь - переход по ссылке. e.preventDefault(); }); $('.multi-accordion li > a').next().parent().addClass('has-children') $('.multi-accordion .has-children > a').click(function(e) { var li = $(this).parent(); li.parent('ul').find('.open').add(li).toggleClass('has-children open').children('ul'); e.preventDefault(); }); .col-left-first { box-sizing:border-box; display: block; position: relative; width: 240px; margin-left: 240px; box-sizing: border-box; } .multi-accordion-catalog { display: block; position: relative; width: 100%; box-sizing:border-box; } .multi-accordion { line-height: 40px; margin: 0; color: #646464; padding: 0; font-family: "Helvetica Neue", Arial, sans-serif; font-weight: normal; font-size: 16px; text-transform: none; } .multi-accordion ul { display: none; list-style: none; padding: 0px; } .multi-accordion li { list-style: none; } .multi-accordion > li > a{ } .multi-accordion > li > ul { padding-left: 8px; } .multi-accordion > li > ul > li > ul { padding-left: 8px; } .multi-accordion a, .multi-accordion a:link, .multi-accordion a:visited { display: block; text-decoration: none; padding: 0 24px 0 10px; color: #646464; position: relative; } .multi-accordion a:hover { } .multi-accordion > a:only-child:link, .multi-accordion > a:only-child:visited { color: blue; } .multi-accordion > a:only-child:hover { text-decoration: underline; background: transparent; } .multi-accordion-title { display: inline-block; position: relative; width: 100%; padding-right: 40px; margin-bottom: 12px; box-sizing:border-box; } .multi-accordion-title:after { content: ''; position: absolute; width: 0; height: 0; border-style: solid; top: 100%; left: -12px; border-width: 0 12px 12px 0; border-color: transparent #cccccc transparent transparent; } .catalog-title { display: inline-block; position: relative; box-sizing:border-box; line-height: 40px; width: 100%; font-family: "Helvetica Neue", Arial, sans-serif; font-weight: 600; font-size: 16px; text-transform: uppercase; background-color: #e1e1e1; padding-left: 10px; box-shadow: -4px 4px 4px rgba(0, 0, 0, 0.2); } .catalog-title:before { content: ''; position: absolute; top: 0; left: -12px; height: 100%; width: 12px; background-color: #e1e1e1; } .catalog-title:after { content: ''; position: absolute; top: 0; left: 100%; border-style: solid; border-width: 0 0 40px 40px; border-color: transparent transparent transparent #e1e1e1; } .has-children, .open { position: relative; } .has-children > a:before , .open > a:before { content: ''; position: absolute; height: 24px; width: 24px; top: 8px; right: 4px; } .has-children > a:before { background: url(https://cdn2.iconfinder.com/data/icons/ios-7-icons/50/down4-16.png) no-repeat; } .open > a:before { background: url(https://cdn1.iconfinder.com/data/icons/mayssam/512/Top_2-16.png) no-repeat; } .multi-accordion .open > ul { display: block; }

Комментариев нет:

Отправить комментарий