98

簡単な例を挙げると、次のブロックがページで何度も繰り返されています (動的に生成されます)。

<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.

誰?ありがとう。

4

5 に答える 5

154

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

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

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

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

于 2010-03-08T02:27:24.297 に答える
20
$(this).parent()

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

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

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

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

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

于 2010-03-08T02:27:11.257 に答える
15

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

$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")
于 2013-08-06T03:04:29.617 に答える
7

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

于 2010-03-08T02:33:50.623 に答える
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();
});
于 2013-03-25T22:10:10.630 に答える