5日目:プルダウンメニュー

プルダウンメニューで指定ページに飛ぶ

2つのHTMLファイルを用意し、それぞれにプルダウンメニューから飛ぶ方法を記載。
用意するHTML:index.html,index-en.html(違いは日本語と英語のみ)

日本語版のHTMLが下記

<form id ='form'>
  <select name='select'>
    <option value='index.html'>日本語</option>
    <option value='index-en.html'>English</option>
  </select>
  <h2>日本語のページ</h2>
</form>
document.getElementById('form').select.onchange = function(){
  location.href = document.getElementById('form').select.value
}

※プルダウンメニューの場合はoptionではなくその親要素からvalueを読み取る。
locationオブジェクトのhrefプロパティは表示しているページのURLを表すので

  location.href = 新しいURL

とすることで新しいURLを指定できる。

ただしこの場合日本語のページ→英語のページとは移動できるが、プルダウンメニューの初期値が日本語であるため
英語のページに行っても日本語が初期表示になる→onchangeが日本語→日本語には対応していないため
英語から日本語への移動はできない。

そこで、htmlファイルのタグに lang="ja"やlang="en"のタグをつけてあげた上で下記のJSを書くと対応する。

const lang =document.querySelector('html').lang;

if(lang === 'ja'){
  document.querySelector('option[value="index.html"]').selected = true;
}else if(lang === 'en'){
  document.querySelector('option[value="index-en.html"]').selected = true;
}

document.getElementById('form').select.onchange = function(){
  location.href = document.getElementById('form').select.value
}

querySelectorは()内に書かれたセレクタにマッチする要素を取得する。
※複数ある場合は一番上のものを取得する。

なので上記コードの場合、htmlのlangをconst langの中に格納している。
その上で、if文でlangの中身をチェックして、該当する要素にselectedを追加している。