2012-01-08 38 views
2

可能有人请解释一下我为什么用jQuery的最近的()不工作

$('.post_title a').hover(function() { 
    $(this).closest(".post_footer").toggleClass('footer_border') 
}); 

不起作用更换以下

$('.post_title a').hover(function() { 
    $(this).parent().parent().parent().parent().find(".post_footer").toggleClass('footer_border') 
}); 

+0

'.post_footer'是否存在于'.post_title a'里面? '.closest()'搜索当前项目及其父项。 – biziclop 2012-01-08 16:41:11

+3

可能是因为'.post_footer'不是'a'的祖先。如果你发布你的HTML,我们可以说更多。 – 2012-01-08 16:42:16

+0

请发布您的HTML。所有答案都必须是猜测或推断你的HTML必须看起来像什么,因为这决定了你如何在页面中找到其他对象。 – jfriend00 2012-01-08 16:45:38

回答

5

看看the documentation for .closest()。它指出:

如果提供的jQuery代表了一组DOM元素,该 .closest()方法搜索通过这些元素以及它们的祖先 DOM树,构建从匹配 元素的新jQuery对象。 .parents()和。 closest()方法与 类似,都是遍历DOM树的。

由于您要查找的元素不是您的链接的祖先,因此它不起作用。为了达到你需要什么,你也可以使用这样的:

$(this).parents().next('.post_footer').eq(0).toggleClass('footer_border'); 
+0

这工作minitech!感谢一吨:) 使现在更多的意义:) – 2012-01-08 16:49:28

+0

我知道这是一个旧的答案,但它真的帮了我。 – 2014-04-02 19:51:14

3

closest()用于查找元素的最接近的直接父级。

在第一个示例中,您使用find()来查找当前元素父级内的元素。这就是为什么closest()失败 - .post_footer不是当前元素的直接父项。

如果您可以发布代码的HTML结构,我可以为您提供有关如何解决此问题的更多详细信息。

+0

为什么我无法粘贴HTML代码。它只是拒绝在没有任何消息的情况下添加评论。 – 2012-01-08 16:51:14

+0

@XtaticUforia编辑您的原始问题并将HTML添加到该问题。 – 2012-01-08 16:55:51

0

尝试这样做...

$('.post_title a').hover(function() { 
    $(this).closest(PARENT_OF_POST_FOOTER_SELECTOR) 
     .find(".post_footer").toggleClass('footer_border') 
}); 

这是假设你已经定义PARENT_OF_POST_FOOTER_SELECTOR。

+0

也解决了它。非常感谢 :) – 2012-01-08 16:59:12