Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
jQuery逆引きリファレンス

jQuery逆引きリファレンス

親子/兄弟関係にある要素を行き来するには?(parents/parent/prev/prevAll/next/nextAll/siblings/children)

2017年6月1日

parents/parent/prev/prevAll/next/nextAll/siblings/children/endメソッドを使って、jQueryオブジェクトで保持している現在の要素セットから、ツリー構造において親子/兄弟関係にある要素を取得する方法を説明する。

  • このエントリーをはてなブックマークに追加

 カレント要素(=jQueryオブジェクトが示す要素)を基点として、親子、もしくは兄弟関係にある要素を取得するには、以下のようなメソッドを利用します。

メソッド 対象の要素
parents([exp]) 先祖要素
parent([exp]) 親要素
prev([exp]) 前の要素(兄要素)
prevAll([exp]) 全ての兄要素
next([exp]) 次の要素(弟要素)
nextAll([exp]) 全ての弟要素
siblings([exp]) 全ての兄弟要素
children([exp]) 子要素(孫要素は対象外)
親子/兄弟関係にある要素を取得するためのメソッド(引数expはセレクター式)

 表で示したメソッドを、「要素間を横断する」という意味で「トラバーシング(Traversing:横断)メソッド」と呼ぶこともあります。

 具体的な例も見てみましょう。以下のサンプルは、「id="me"」である<div>要素を基点に、親子/兄弟関係にある要素を取得し、それぞれにスタイルを変更する例です。

HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>jQuery TIPS</title>
<style> #family div { margin-left: 10px; } </style>
</head>
<body>
<div id="family">
  お祖父さん
  <div>
    お父さん
    <div>大きいお兄さん</div>
    <div class="fav">小さいお兄さん</div>
    <div id="me">
      ぼく
      <div>ペットのサクラ</div>
    </div>
    <div></div>
    <div class="fav"></div>
  </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
$(function() {
  $('#me').
    css('font-weight', 'bold').           // テキストをボールド

    next().                               // 1
    css('background-color', 'Yellow').    // 背景色を黄色に
    end().                                // 元の要素に戻る

    nextAll().
    css('color', 'Blue').                 // テキスト色を青に
    end().

    prev().                               // 3
    css('background-color', 'Lime').      // 背景色をライム色に
    end().

    prevAll().
    css('color', 'Red').                  // テキスト色を赤に
    end().

    parent().
    css('border', 'dashed 1px Green').    // 枠として緑の破線を
    end().

    parents().
    css('text-decoration', 'underline').  // テキストに下線を
    end().

    siblings().                           // 2
    css('font-size', 'x-small').          // フォントサイズを小さく
    end().

    children().
    css('text-decoration', 'line-through');  // テキストに打消し線を
});
</script>
</body>
</html>
現在の要素を基点に親子/兄弟関係にある要素にスタイル付け(prev.html)

各丸数字については、本文内で説明する。

親子/兄弟要素にスタイルが適用された
親子/兄弟要素にスタイルが適用された

 トラバーシングメソッドを利用する際には、一点、

カレント要素(=jQueryオブジェクトが示す要素)が変化する

ことに注意してください。例えば、1の前ではカレント要素は「<div id="me">...</div>」ですが、1のタイミングで「<div>弟</div>」に移動します。このように、カレント要素が変化してしまった場合、元の状態に戻す役割を持つのがendメソッドです。

 上のサンプルでは、メソッドチェーンとendメソッドを組み合わせることで、基点となる要素とその周辺の要素とを行き来しながら、順に目的の要素にスタイル付けしているというわけです。

引数expを利用した例

 これらトラバーシング系のメソッドでは、引数としてセレクター式を渡すことで、取得すべき要素を絞り込むこともできます。例えば2のコードを、以下のように書き換えてみましょう。

JavaScript
siblings('.fav').
引数expを指定したコード(siblingsメソッド)
「class=
「class="fav"」である要素のスタイルだけが変更された

具体的には「小さいお兄さん」要素と「妹」要素のスタイルだけが変更され(=小さい文字になっている)、「大きいお兄さん」要素と「弟」要素のスタイル設定(小さい文字にする)が行われなくなった。

 同じく、3のコードを、以下のように書き換えてみます。

JavaScript
prev('.any).
引数expを指定したコード(prevメソッド)
該当の要素がないので、スタイルは変更されない
該当の要素がないので、スタイルは変更されない

 prevメソッドは直前の要素を取得するためのメソッドなので、直前の要素が引数expに合致しない場合、要素は取得されない点に注意してください(=そのさらに前の要素に合致する要素があったとしても取得されません)。

処理対象:ツリー上の要素選択 カテゴリ:トラバーシング(選択系の操作)
API:.parents()|.parent()|.prev()|.prevAll()|.next()|.nextAll()|.siblings()|.children() カテゴリ:Traversing(トラバーシング) > Tree Traversal(検索/ツリー上の要素選択)
API:.end() カテゴリ:Traversing(トラバーシング) > Miscellaneous Traversing(その他のトラバーシング機能)

※以下では、本稿の前後を合わせて5回分(第69回~第73回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

jQuery逆引きリファレンス
69. 要素セットを指定の条件で絞り込むには?(filter)

filterメソッドを使って、jQueryオブジェクトで保持している現在の要素セットを、指定された条件で絞り込む方法を説明する。

jQuery逆引きリファレンス
70. 特定の要素を基点に別の要素を検索するには?(find)

findメソッドを使って、jQueryオブジェクトで保持している現在の要素セットの配下から、指定された条件の要素を検索する方法を説明する。

jQuery逆引きリファレンス
71. 【現在、表示中】≫ 親子/兄弟関係にある要素を行き来するには?(parents/parent/prev/prevAll/next/nextAll/siblings/children)

parents/parent/prev/prevAll/next/nextAll/siblings/children/endメソッドを使って、jQueryオブジェクトで保持している現在の要素セットから、ツリー構造において親子/兄弟関係にある要素を取得する方法を説明する。

jQuery逆引きリファレンス
72. 現在の要素から指定された祖先/兄弟要素までを取得するには?(prevUntil/nextUntil/parentsUntil)

prevUntil/nextUntil/parentsUntilメソッドを使って、jQueryオブジェクトで保持している現在の要素セットから、現在の要素の直後から、ツリー構造において(指定された)兄/弟/親の関係にある要素の直前までの範囲にある全要素を取得する方法を説明する。

jQuery逆引きリファレンス
73. 要素セットの内容を順に処理するには?(map)

jQueryオブジェクトで保持している要素セットを、1つずつ順番に処理し、その処理結果をjQueryオブジェクトとして取得できるmapメソッドの基本的な使い方を説明する。

サイトからのお知らせ

Twitterでつぶやこう!