以下のようなHTMLがあるとする。

<select name="pref_cd" id="select-pref">
  <option value="">選択してください</option>
  <option value="1">北海道</option>
  <option value="2">青森県</option>
  <option value="3">岩手県</option>
  <option value="4">宮城県</option>
  <option value="5">秋田県</option>
  ...
</select>

よくある都道府県選択欄で、値として整数の都道府県コードを持ち、テキストとして都道府県名を持ったselect要素だ。

先日、とある案件で、JavaScriptで都道府県名を変数として持っており、変数の値に一致するoption要素にselected属性を付与したいケースがあった。

option要素の値に都道府県名がセットされている場合は容易いのだが、値が整数コードとなっているとそう単純ではない。

今回はこのようなケースにおいて、option要素のテキスト部分と変数の値を比較して、マッチした要素にselected属性を付与する方法を紹介する。

filter関数を使う

JavaScriptのfilter関数を使うと良い。

var pref = '岩手県';
$('#select-pref option').filter(function(idx){
  return $(this).text() === pref;
}).prop('selected', true);

filter関数で全てのoption要素に処理をかけ、テキストと変数を比較する。

後はマッチした場合にpropメソッドでselected属性を設定すればOK。