前回の質問【特定要素に特定クラスがついている場合のみチェックボックスにcheckedを付与したい】からの派生です。
チェックボックスでアコーディンを開閉を制御していましたが、今後メニュー項目の増加でinput
とlabel
の記述が多くなるという理由からjsに変えました。
やりたいこと
・クラス名current
が付与された場合、該当のアコーディオンをアコーディオン展開にする
新html
<nav class="collapsibleNav"> <div class="collapsibleNav__wrap"> <ul class="mainNav"> <li class="mainNav__item"> <a href="#" class="mainNav__item__link is-toggle-accNav">メニュー1(クリックで開く)</a> <ul class="mainNavKids"> <li class="mainNavKids__item"><a href="./test.html" class="mainNav__item__link">サブメニュー1</a></li> <li class="mainNavKids__item"><a href="#" class="mainNav__item__link">サブメニュー1</a></li> <li class="mainNavKids__item"><a href="#" class="mainNav__item__link">サブメニュー1</a></li> </ul> </li> <li class="mainNav__item"> <span class="is-toggle-accNav">メニュー2(クリックで開く)</span> <ul class="mainNavKids"> <li class="mainNavKids__item"><a href="#" class="mainNav__item__link">サブメニュー1</a></li> <li class="mainNavKids__item"><a href="#" class="mainNav__item__link">サブメニュー1</a></li> </ul> </li> <li class="mainNav__item"> <a href="#" class="">メニュー1(クリックで開く)</a> </li> </ul> </div> </nav> 〜略〜 <script> $(function(){ $(".is-toggle-accNav").on("click", function() { $(this).next().slideToggle(500); }); }); //current $(function(){ $('.mainNav__item__link').each(function(){ var $href = $(this).attr('href'); if(location.href.match($href)) { $(this).parent().addClass('current'); $(this).parent().parent().parent().addClass('current'); } else { $(this).parent().removeClass('current'); } }); }); //current-open $(function(){ $('.acc-subOpen', $('.mainNav__current').closest('.mainNav__item')).prop('checked', true).trigger('change'); }); </script>
完成イメージ
現在もしくは遷移時のページを子メニュー1とし、ロード時にメニュー1と子メニュー1にcurrent
が付与され、メニュー1のアコーディオンが展開されている。
〜略〜 <ul class="mainNav"> <li class="mainNav__item current"> <span class="mainNav__toggleAcc js-mainNav__toggleAcc">メニュー1</span> <ul class="mainNavKids"> <li class="mainNavKids__item current"><a href="">サブメニュー1</a></li> <li class="mainNavKids__item"><a href="">サブメニュー1</a></li> <li class="mainNavKids__item"><a href="">サブメニュー1</a></li> </ul> 〜略〜
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/22 10:26
2020/01/23 01:06
2020/01/23 02:09
2020/01/23 03:06
2020/01/23 03:11
2020/01/23 03:12
2020/01/23 03:33