カレントメニューを実装する
jsでカレントメニューを実装するコード。
- URLとメニューのリンク先を比べて、一致する場合
a
タグにcurrent
を付与する
HTML
<div class="menu"> <ul> <li><a href="./">index</a></li> <li><a href="./page1.html">page1</a></li> <li><a href="./page2.html">page2</a></li> <li><a href="./page3.html">page3</a></li> </ul></div>
<div class="contents_area"> <p>index</p></div>
JavaScript
const a = document.querySelectorAll('.menu li a');
//URLを配列に格納して最後の1つ(ファイル名)だけ抽出const page = window.location.pathname.split('/').slice(-1);
//index.htmlがなければ追加するif (page == '') { page.pop(); page.push('index.html');}
a.forEach(function(elm, i) { let href = elm.getAttribute('href').split('/').at(-1);
//index.htmlがなければ追加する if (href == '') href = 'index.html';
//class付与 href === page.toString() ? elm.classList.add('current') : elm.classList.remove('current');})
グロナビメニューなどでリンク先のindex.html
が重複する場合、ファイル名だけでなくその階層のディレクトリも取得して比較しないと、すべてのindex.html
にカレントがついてしまうので注意。
//グロナビで使用する場合const page = window.location.pathname.split('/').slice(-2);
//index.htmlがなければ追加するif (page.at(-1) == '') { page.pop(); page.push('index.html');}
a.forEach(function(elm, i) { let href = elm.getAttribute('href').split('/').at(-2);
//(略)})