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()
大卫说恢复莫妮卡(Monica)2010年

@ricebowl:错。 api.jquery.com/parents
Slaks

@ricebowl ... parent()会给div某些东西,所以我需要parent()才能到达div框。
汤姆(Tom)2010年

啊; 我很抱歉。嗯...我不知道是让我的无知显示还是为了避免让其他人感到不适而删除错误是最好的... = | 不过,至少我今天学到了一些有用的东西。这就是重点,对吧..?=)
大卫说恢复莫妮卡(Monica

1
@ricebowl,不用担心,感谢您的贡献。
汤姆(Tom)2010年

Answers:


144

调用.parents(".box .something1")将返回与选择器匹配的所有父元素.box .something。换句话说,它将返回中.something1和内的父元素.box

您需要获取最亲父母的孩子,如下所示:

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

此代码调用.closest以获取与选择器匹配的最里面的父对象,然后调用.children该父元素以查找您要查找的叔叔。


我知道这有点老了,但是在这种情况下,使用parent()而不是closest()更好吗,因为我想像一下,使用closed()可以进行更多的树遍历吗?
rmorse 2012年

1
@acSlater:他需要遍历树。 parent()是错误的元素。
SLaks 2012年

是的,汤姆需要对不起,是parent()。parent()!:)
rmorse 2012年

1
@acSlater:是的;那会起作用。但是,它使Javascript与HTML结构的耦合更加紧密。 .closest(...)更具弹性,也更具可读性。
SLaks 2012年

7
如果有人想知道:在使用.closest()找到合适的父级之后,如果要查找的子级元素不是直接子级(例如,是子级的子级),则只需使用即可。使用find()代替.children。
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");

还有更多方法,您可能会发现这些文档很有用。


谢谢,但不是要寻找父母,而是寻找父母的另一个孩子(实际上是祖父母)。
汤姆(Tom)2010年

呵呵...确实是家庭事务。
汤姆(Tom)2010年

13

这将找到具有类的第一个父类,box然后找到具有正则表达式匹配的第一个子类something并获取ID。

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


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();
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.