jQuery eq() メソッドで複数の要素を選択する方法
jQuery の eq() メソッドは、HTML ドキュメント内の要素の集合から、特定のインデックス番号を持つ要素を選択することができます。このメソッドは、リスト項目のスタイル変更、テーブルの行の操作、動的に生成されたコンテンツの操作など、様々な場面で役立ちます。この記事では、eq() メソッドの基本的な使い方から、複数の要素を選択するテクニック、実用的な例、注意点まで詳しく解説します。
jQuery eq() メソッドの基本
eq() メソッドは、jQuery オブジェクト内の要素の集合に対して、指定されたインデックス番号を持つ要素を返します。インデックス番号は0から始まり、最初の要素は0、2番目の要素は1、というように割り当てられます。
構文
$(selector).eq(index)
パラメータ:
パラメータ | 説明 |
---|---|
selector | (必須) 要素を選択するためのセレクタ。 |
index | (必須) 選択する要素のインデックス番号 (0から始まる)。 |
単一要素の選択例
以下のHTMLコードを例に、eq() メソッドを使ってリストの2番目の項目を選択してみましょう。
<ul>
<li>項目1</li>
<li>項目2</li>
<li>項目3</li>
</ul>
$("li").eq(1).css("color", "red");
このコードは、リストの2番目の項目 (インデックス番号1) のテキストの色を赤に変更します。
複数の要素を選択するテクニック
eq() メソッドは単一要素の選択だけでなく、他の jQuery メソッドと組み合わせることで複数の要素を選択することも可能です。
:eq セレクタとの組み合わせ
:eq セレクタを使うと、複数のインデックス番号を指定して要素を選択することができます。:eq セレクタは、括弧の中にカンマ区切りでインデックス番号を指定します。
$("li:eq(0), li:eq(2)").css("background-color", "yellow");
このコードは、リストの最初の項目と3番目の項目の背景色を黄色に変更します。
filter() メソッドとの組み合わせ
filter() メソッドを使うと、特定の条件に合致する要素だけを選択することができます。filter() メソッドには、セレクタまたは関数式を渡すことができます。
$("li").filter(":even").css("font-style", "italic");
このコードは、リストの偶数番目の項目のフォントスタイルを斜体にします。
slice() メソッドとの組み合わせ
slice() メソッドを使うと、特定の範囲内の要素を選択することができます。slice() メソッドには、開始位置と終了位置を渡します。終了位置は省略可能で、省略した場合は最後の要素までが選択されます。
$("li").slice(1, 3).css("text-decoration", "underline");
このコードは、リストの2番目から3番目の項目に下線を引きます。
実用的な例: eq() メソッドを活用する
eq() メソッドは、様々な場面で活用することができます。以下に、いくつかの実用的な例を紹介します。
リスト項目のスタイル変更: 奇数行と偶数行に異なるスタイルを適用する
$("li:even").css("background-color", "#f2f2f2");
$("li:odd").css("background-color", "#e9e9e9");
このコードは、リストの偶数行と奇数行に異なる背景色を適用します。
テーブルの行の操作: 特定の行のデータを取得または変更する
// 2番目の行の最初のセルの値を取得する
var value = $("table tr").eq(1).find("td").eq(0).text();
// 3番目の行の最後のセルに値を設定する
$("table tr").eq(2).find("td:last").text("新しい値");
このコードは、テーブルの特定の行のデータを取得または変更する方法を示しています。
動的なコンテンツの操作: AJAX で読み込まれた要素を選択する
$.ajax({
url: "data.json",
dataType: "json",
success: function(data) {
// AJAX で読み込んだデータを表示する
for (var i = 0; i < data.length; i++) {
$("#result").append("<p>" + data[i].name + "</p>");
}
// 5番目に追加された要素を選択する
$("#result p").eq(4).css("font-weight", "bold");
}
});
このコードは、AJAX で読み込んだデータを表示し、5番目に追加された要素のフォントを太字に設定しています。
注意点と代替手段
インデックス番号は0から始まる
eq() メソッドのインデックス番号は0から始まることに注意してください。最初の要素は0、2番目の要素は1、というように割り当てられます。
要素が存在しない場合の挙動
指定したインデックス番号の要素が存在しない場合、eq() メソッドは空の jQuery オブジェクトを返します。エラーを回避するために、要素が存在するかどうかのチェックを行うことが重要です。
JavaScript のネイティブな方法との比較 (querySelectorAll、 Array.slice())
JavaScript のネイティブなメソッドである querySelectorAll() や Array.slice() を使うことでも、同様の結果を得ることができます。jQuery を使用しない場合は、これらのメソッドを検討してみてください。
- querySelectorAll(":nth-child(n)"): CSS セレクタを使用して、特定の番号の子要素を選択できます。
- Array.slice(): 配列の一部を切り出して新しい配列を作成できます。querySelectorAll() で取得した NodeList を配列に変換して使用します。
まとめ
jQuery の eq() メソッドは、特定のインデックス番号を持つ要素を選択する強力なツールです。単一要素の選択はもちろんのこと、他の jQuery メソッドと組み合わせることで、複数の要素を選択したり、複雑な操作を行ったりすることも可能です。この記事で紹介したテクニックを活用して、HTML ドキュメントの操作を効率化しましょう。
jQuery eq() メソッドに関するQ&A
Q1: eq() メソッドと :eq セレクタの違いは何ですか?
A1: eq() メソッドと :eq セレクタはどちらも特定のインデックス番号を持つ要素を選択するために使用できますが、使用場面が異なります。eq() メソッドは、jQuery オブジェクト内の要素の集合に対して使用されるのに対し、:eq セレクタは、セレクタとして使用されます。つまり、eq() メソッドは、既に jQuery オブジェクトとして取得されている要素の集合に対して使用し、:eq セレクタは、要素を取得する際に使用します。
Q2: 要素が存在しない場合、eq() メソッドはどうなりますか?
A2: 要素が存在しない場合、eq() メソッドは空の jQuery オブジェクトを返します。エラーは発生しません。
Q3: eq() メソッドを使用して、複数の要素を選択できますか?
A3: eq() メソッド単体では、1つの要素しか選択できません。しかし、他の jQuery メソッドと組み合わせることで、複数の要素を選択することが可能です。例えば、:eq セレクタと組み合わせたり、filter() メソッドと組み合わせたりすることで、複数の要素を選択できます。
その他の参考記事:jquery eq 取得