jQueryで既知のクラスを持つ親を見つける方法は?


242

私は<div>その中に他<div>の多くのを持ち、それぞれが異なる入れ子レベルにあります。すべての子<div>に識別子を与えるのではなく、ルート<div>に識別子を与えるだけです。次に例を示します。

<div class="a" id="a5">
  <div class="b">
    <div class="c">
      <a class="d">
      </a>
    </div>
  </div>
</div>

クラスに応答する関数をjQueryで記述し、dその親であるクラスのIDを見つけたいa場合、どうすればよいですか?

$('.a').attr('id');複数のクラスが存在するため、単純に行うことはできませんa。私はその親の親の親のIDを見つけることができましたが、デザインが悪く、遅く、あまり多形的ではないようです(クラスのIDを見つけるために別のコードを記述する必要がありますc)。

回答:


488

それthis.dであると仮定すると、あなたは書くことができます

$(this).closest('.a');

このclosestメソッドは、セレクターに一致する要素の最も内側の親を返します。


47
少し注意点があることに注意してください。開始要素もクエリと一致する場合は、親要素を取得せず、代わりに同じ要素を取得します。これは動作を望まない場合があります。そうでない場合は、これをお勧めします:$(this).parent()。closest( '。a');
Risord

1
非常に役立ちます。私はいつも$(this).parent()。parent()。parent()を行うために使用しており、より良い解決策があることを知っていました。
Wang'l Pakhrin

28

セレクターをjQuery 関数に渡します。

d.parents('.a').attr('id')

編集うーん、実際にはSlaksの答えは、セレクターに一致する最も近い祖先だけが必要な場合に優れています。


8

parents()を使用して、特定のセレクターを持つすべての親を取得できます。

説明:必要に応じてセレクターでフィルター処理された、一致する要素の現在のセット内の各要素の祖先を取得します。

しかし、parent()は要素の最初の親のみを取得します。

説明:現在の一致する要素のセット内の各要素の親を取得します。オプションでセレクターでフィルター処理できます。

jQuery parent()とparents()

そして、私は最高だと思う.parentsUntil()があります。

説明:現在の一致する要素のセット内の各要素の祖先を取得します。ただし、セレクターによって一致した要素は含まれません。


彼は一人の親しか望んでいないので、彼に電話する必要がありますclosest
SLaks


0

上記の@Resordのコメントから抽出。これは私にとってはうまくいき、質問にもっと傾倒しました。

$(this).parent().closest('.a');

ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.