jQueryを使用しない現在地表示(ES6:JavaScript)
お久しぶりです。
もうES2015(ES6)を使用すれば、大分楽な時代になりました。
なんとなくjQueryを使用しない現在地表示のJavaScriptを記述したのでご自由にお使いください。
想定されるhtml
<ul class="element"> <li><a href="/aaa/">りんく1</a></li> <li><a href="/bbb/">りんく2</a></li> <li><a href="/ccc/">りんく3</a></li> </ul>
JavaScript
const dir = location.href.split('/'); const dir2 = dir[3]; let glovalNav = document.querySelectorAll('.element a'); glovalNav = Array.prototype.slice.call(glovalNav, 0); glovalNav.forEach( (element) => { if(dir2 !== '' && element.getAttribute('href').match(dir2)){ /*aタグにclass付与する場合*/ element.classList.add('active'); /* 親要素 liタグにclass付与する場合 element.parentNode.classList.add('active'); */ } });
- 現在閲覧しているURLを取得し、/(スラッシュ)ごとでスプリットして分割する
- 第二階層のdir[3]を格納
- ターゲットとなる要素の a要素を指定
- a要素のhrefが、2で取得した第二階層と一致しているか確認し、一致した場合 classを付与
※ トップページのみ第二階層を持たないので、第二階層が空でないことも確認
IE11でも動くようにしたい場合は、以下。
"use strict"; var dir = location.href.split('/'); var dir2 = dir[3]; var glovalNav = document.querySelectorAll('.element a'); glovalNav = Array.prototype.slice.call(glovalNav, 0); glovalNav.forEach(function (element) { if (dir2 !== '' && element.getAttribute('href').match(dir2)) { /*aタグにclass付与する場合*/ element.classList.add('active'); /* 親要素 liタグにclass付与する場合 element.parentNode.classList.add('active'); */ } });