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と同じようなやり方で要素を操作する事は出来ません。
残念。