JavaScriptおれおれAdvent Calendar 2013 – 01日目
いよいよ始まりました。初日はこのメソッドから始めましょう。
今時の開発だとまずjQueryを使っていると思うのですが、ちょっとした開発(あるいはデバッグ)でjQueryを導入するのも面倒だなーという時に便利なメソッドです。
document.querySelector()
というわけでこのdocument.querySelector()を使うと、セレクターを使って要素検索をする事が出来ます。
<ul id="list">
<li class="current"><a href="/home">ホーム</a></li>
<li><a href="/tags">タグ</a></li>
<li><a href="/categories">カテゴリー</a></li>
</ul>
var elem = document.querySelector('#list .current>a');
古いやり方だとdocument.getElementsByTagName()なんかで頑張って探す感じですが、最近のブラウザー (IEも8+) であればquerySelector()を使ってセレクターで検索する事が可能です。
複数ならdocument.querySelectorAll()
querySelector()はセレクターに合致する最初の要素を返しますが、複数欲しいときはdocument.querySelectorAll()を使います。こちらは要素を配列風のオブジェクトで返します。
<ul id="list">
<li class="current"><a href="/home">ホーム</a></li>
<li><a href="/tags">タグ</a></li>
<li><a href="/categories">カテゴリー</a></li>
</ul>
var elems = document.querySelectorAll('#list li>a');
for (var i=0, l=elems.length; i<l; i++) {
var elem = elems[i];
}
配列風なのでfor文でぐるぐる回して処理する事が出来ます。
配列? コレクション?
ただ配列ではないので、forEach()なんかは使う事が出来ません。
またdocument.getElementsByTagName()等はリアルタイムに内容が更新される(戻り値を持ったまま文書ツリーから要素を追加、削除すると、先の戻り値にも反映される)のですが、document.querySelectorAll()の場合はそうはならない(その時点での要素の一覧のまま)という点も異なります。
要素内の検索にも使える
querySelector()もquerySelectorAll()も、documentだけでなく、各要素内からの検索に利用する事も出来ます。
<ul id="list">
<li class="current"><a href="/home">ホーム</a></li>
<li><a href="/tags">タグ</a></li>
<li><a href="/categories">カテゴリー</a></li>
</ul>
var elList = document.querySelector('#list');
var elCurItem = elList.querySelector('.current');
取ってきた要素の使い方
なおjQueryと同じようなやり方で要素を検索する事は出来ましたが、jQueryと同じようなやり方で要素を操作する事は出来ません。
残念。