jQuery:親の特定の子に到達する方法は?


92

単純化した例を示すために、ページで何度も繰り返される次のブロックがあります(動的に生成されます)。

<div class="box">
   <div class="something1"></div>
   <div class="something2">
      <a class="mylink">My link</a>
   </div>
</div>

クリックすると、リンクの親に移動できます。

$(".mylink").click(function() {
   $(this).parents(".box").fadeOut("fast");
});

しかし...私<div class="something1">はその特定の親のに到達する必要があります。

基本的に、誰かが直接それを参照することができなくても、より高いレベルの兄弟を参照する方法を教えてもらえますか?それを兄貴としましょう。兄のクラス名を直接参照すると、ページ上のその要素のすべてのインスタンスがフェードアウトしますが、これは望ましい効果ではありません。

私はもう試した:

parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.

誰でも?ありがとう。


Anuragの答えは正しいように見えないかもしれません-それは確かに私を止めて考えさせました-それはセレクターが失敗する原因となっているコードの露骨なタイプミスを指摘しています。jQueryのセレクターは.parent() そう ではありません.parents()
デビッドはモニカを

@ricebowl:不正解です。 api.jquery.com/parents
SLaks

@ricebowl ... parent()はdiv something2を与えるので、divボックスにアクセスするにはparents()が必要です。
トム

ああ。謝罪いたします。うーん...私の無知を表示したままにするのが最善なのか、それとも誰かを混乱させないようにエラーを削除するのが最善なのかわかりません... = | それでも、少なくとも今日は何か役に立つことを学びました。それがポイントですね。=)
デビッドはモニカを

1
@ricebowl、心配しないで、貢献してくれてありがとう。
トム

回答:


144

呼び出し.parents(".box .something1")は、セレクタに一致するすべての親要素を返します.box .something。つまり、の.something1内部および内部にある親要素を返し.boxます。

次のように、最も近い親の子を取得する必要があります。

$(this).closest('.box').children('.something1')

このコードは.closest、セレクターに一致する最も内側の親を取得するために呼び出し、次に.childrenその親要素を呼び出して、探している叔父を見つけます。


私は、これは少し古いです知っているが、それは使用にこのケースでは良いとは限りません)(親ではなく)(最も近い私はとのより多くのツリートラバーサルがあると想像として)(最も近いですか
rmorse 2012年

1
@acSlater:彼ツリートラバーサルを必要としています。 parent()間違った要素です。
SLaks

ああそうです、トムが申し訳ありません。:)
rmorse

1
@acSlater:はい。それはうまくいくでしょう。ただし、JavascriptがHTML構造にさらに結合されます。 .closest(...)より弾力性があり、読みやすくなっています。
SLaks

7
誰かが疑問に思っている場合:.closest()を使用して適切な親を見つけた後、直接の子ではない(ただし、子の子など)子要素を探している場合は、を使用してください。 .childrenの代わりにfind()。
Fabien Snauwaert、2014

17
$(this).parent()

ツリートラバーサルは楽しい

$(this).parent().siblings(".something1");

$(this).parent().prev(); // if you always want the parent's previous sibling

$(this).parents(".box").children(".something1");

さらに多くの方法で、これらのドキュメントが役立つ場合があります。


ありがとう、でも親を探していたのではなく、親の別の子(実際には祖父母)を探していました。
トム

へへ...確かにそれは家族問題です。
トム

13

これにより、クラスboxを持つ最初の親が見つかり、次に正規表現が一致する最初の子クラスが見つかりsomething、IDが取得されます。

$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")

6

私があなたの問題を正しく理解した場合、$(this).parents('.box').children('.something1')これはあなたが探しているものですか?


5

あなたは使うことができ.each().children()、括弧内のセレクタと:

//Grab Each Instance of Box.
$(".box").each(function(i){

    //For Each Instance, grab a child called .something1. Fade It Out.
    $(this).children(".something1").fadeOut();
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.