Fly higher! Sky is the limit!

webの現場で働く人のブログ

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');
    */
  }
});
  1. 現在閲覧しているURLを取得し、/(スラッシュ)ごとでスプリットして分割する
  2. 第二階層のdir[3]を格納
  3. ターゲットとなる要素の a要素を指定
  4. 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');
        */
    }
});