jQueryでは、処理対象の要素をセレクターを利用して指定します。
CSSと同じセレクターを利用することができるため、標準のJavaScriptに比べて柔軟に要素を指定できるようになっています。
jQueryの基本(セレクター編)
1. セレクターとは
jQueryでHTML要素を操作するときは、まず、操作の対象となるHTML要素を指定します。
たとえば、複数の製品写真の表示の切り替えにフェードアウト/フェードインのエフェクトをかける場合を考えてみましょう。
この場合、単純にimg要素に対してエフェクトを適用すると、Webページ上のすべての画像にフェードアウト/フェードインがかかってしまうため、『クラス名に「slideltems」を設定したimg要素』というように、操作対象となる要素を絞り込む必要があります。
このように、操作対象を特定の要素に限定する働きをもつのがセレクターです。
標準のJavaScripyでは、要素を指定する際に「要素名(getElememtsByTagName)」「id名(getElementById)」「name属性(getElementsByName)」をもとにした指定方法しかなかったため、スクリプトが煩雑になりがちでした。
jQueryには、「Sizzle」と呼ばれるCSSセレクターエンジンが搭載されているため、CSS1からCSS3の仕様で規定されているほとんどのセレクターをそのまま利用できます。
こちらはjQueryのもっとも強力な機能のひとつで、より手軽に操作対象の要素を選択できます。
2. 利用可能なセレクター
jQueryで利用できるセレクターは次の通りです。
利用できるセレクターを理解しておけばスクリプトをシンプルに記述できるため、動作速度や開発効率が大きく向上します。
・基本セレクター
・階層セレクター
3. jQueryと標準のJavaScriptの記述を比較
var target = null;
var images = document.getElementsByTagName(“img”);
for(var i = 0; target = images[i]; i++){
if(target.className.match(/slideltems/i)){
var timer = window.setTimeout(function(){
// フェードアウトの処理
},1000/20);
}
}
・基本フィルター
・コンテンツフィルター
・可視性フィルター
・属性フィルター
・子要素フィルター
・フォーム
・フォームフィルター
セレクターはできるだけシンプルに記述する事が重要です。
セレクターを不必要に複雑に記述すると、jQuery内部での処理に時間がかかり、パフォーマンスが低下します。たとえば、次のような子孫セレクターの記述を見てみましょう。
$(“div#container div#content p#article”);
このセレクターの記述は目的の要素を選択する事だけを考えるのであれば問題ありませんが、処理速度に影響が出ることもあります。
複雑なセレクターの場合、セレクターの内容を読み取るためのテキスト処理がそのぶん増えていきます。
このセレクターではターゲットとなる要素がp#articleとなっていることから、次のように記述すればjQueryがもっとも効率よく動作します。
$(“#article”);
この例では処理速度の遅れを体感できるほどの大きな差は出ませんが、サイズが大きくマークアップも複雑なWebページに対してJavaScriptを組み込んだり、複雑な処理を実装した場合には、体感速度に違いが出てくることもあります。
jQueryでセレクターを指定するときには、なるべくシンプルな記述を行うことを心がけましょう。
3-1. 基本セレクター
[種類] | [検索対象] | [セレクタ―名] |
#id名 | id属性値 | 一意(id)セレクター |
要素名 | 要素名 | タイプセレクター |
.クラス名 | class属性値 | クラスセレクター |
セレクター,セレクター... | 指定された複数のセレクター | グループセレクター |
* | すべての要素 | ユニバーサル(全称)セレクター |
$(“h1”,”p.desc”,”span”)
id名、要素名やクラス名を指定します。
例文ではh1要素、クラス名「desc」のp要素、span要素を選択しています。
3-2. 階層セレクター
[種類] | [検索対象] | [セレクタ―名] |
要素名 子孫要素名 | [要素名]の子孫要素 | 子孫セレクター |
親要素名>子要素名 | [親要素名]の子要素 | 子セレクター |
直前の要素名+隣接する要素名 | 同じ親要素をもつ[直前の要素名]の直後にある要素 | 隣接セレクター |
直前の要素~関節する要素名 | 同じ親要素をもつ[直前の要素名]以降に出現する要素 | 関節セレクター |
$(“ul+p”)
HTMLの階層関係をもとに要素を指定します。
例文では隣接セレクターを利用し、同じ階層にあるul要素の直後に出現するp要素を選択しています。
3-3. 基本フィルター
[種類] | [フィルター対象] |
セレクター:first | 一番最初の要素 |
セレクター:last | 一番最後の要素 |
セレクター:not(セレクター2) | [セレクター2] 以外の要素 |
セレクター:even | 偶数番目の要素(0から数える) |
セレクター:odd | 奇数番目の要素(0から数える) |
セレクター:eq(数値) | [数値] 番目の要素(0から数える) |
セレクター:gt(数値) | インデックスが [数値] より大きい要素(0から数える) |
セレクター:lt(数値) | インデックスが [数値] より小さい要素(0から数える) |
セレクター:header | 見出し要素(h1,h2,...) |
セレクター:animated | アニメーション実行中の要素 |
$(“tr:last”)
奇数番目や偶数番目など、特定の条件で要素を絞り込みます。
例文ではテーブルの最終行にあるtr要素を選択しています。
3-4. コンテンツフィルター
[種類] | [フィルター対象] |
セレクター:contains(文字列) | [文字列] を 含む要素 |
セレクター:parent | 子要素をもつ要素 (テキストも対象) |
セレクター:empty | 子要素をもたない要素 (テキストも対象) |
セレクター1:has(セレクター2) | [セレクター2] の子要素をもつ要素 |
$(“p:has(span)”)
子要素の有無など、コンテンツの状態に応じて要素を絞り込みます。
例文ではspan要素を子要素としてもつp要素を選択しています。
3-5. 可視性フィルター
[種類] | [フィルター対象] |
要素名:visible | 表示状態の要素 |
要素名:hidden | 非表示状態の要素 |
$(“div:visible”)
HTML要素の表示状態によって要素を絞り込みます。
例文では表示状態にあるdiv要素を選択しています。
3-6. 属性フィルター
[種類] | [フィルター対象] |
セレクター[属性名] | [属性名]をもつ要素 |
セレクター[属性名 = 属性名] | [属性名]の値が [属性値]と等しい要素 |
セレクター[属性名 != 属性名] | [属性名]の値が [属性値]と異なる要素 |
セレクター[属性名 ^= 属性名] | [属性名]の値が [属性値]で始まる要素 |
セレクター[属性名 $= 属性名] | [属性名]の値が [属性値]で終わる要素 |
セレクター[属性名 *= 属性名] | [属性名]の値が [属性値]を含む要素 |
セレクター[接続フィルター1][属性フィルター2] | すべての[属性フィルター]の条件を満たす要素 |
$(“input[value=’active’]”)
HTML要素の属性値を検索して選択する要素を絞り込みます。
例文ではvalue属性の値が「active」のinput要素を選択しています。
3-7. 属性フィルター
[種類] | [フィルター対象] |
セレクター:nth-child(数値またはキーワード) | 数値番目の子要素。even(奇数番目)、odd(偶数番目)、数値n(数値の倍数番目の子要素(1から数える))も指定可 |
セレクター:first-child | 親要素の最初の子要素 |
セレクター:last-child | 親要素の最後の子要素 |
セレクター:only-child | 親要素の唯一の子要素 |
$(“ul li:nth-child(2)”)
HTML要素の子要素を選択します。
例文ではul要素の2番目のli要素を選択しています。
3-8. フォーム
[種類] | [フィルター対象] |
セレクター:input | input 要素 textarea要素 select要素 button要素 |
セレクター:text | type属性が”text”のinput要素 |
セレクター:password | type属性が”password”のinput要素 |
セレクター:radio | type属性が”radio”のinput要素 |
セレクター:checkbox | type属性が”checkbox”のinput要素 |
セレクター:file | type属性が”file”のinput要素 |
セレクター:hidden | type属性が”hidden”のinput要素と非表示状態の要素 |
セレクター:image | type属性が”image”のinput要素 |
セレクター:button | type属性が”button”のinput要素とbutton要素 |
セレクター:submit | type属性が”submit”のinput要素とbutton要素 |
$(“:text”)
HTML要素の子要素を選択します。
例文ではul要素の2番目のli要素を選択しています。
3-9. フォームフィルター
[種類] | [フィルター対象]可能 |
セレクター:enabled | 利用可能な要素 |
セレクター:disabled | 利用不能な要素 |
セレクター:checked | チェックされている要素 |
セレクター:selected | 利用可能な要素 |
$(“input:checked”)
状態をもとにフォーム要素を選択します。
例文ではチェックされているinput要素(チャックボックス)を選択しています。