如何使用jQuery查找一组元素的父级?

3

考虑到这个标记:

<div class="some_container">
  <p>...</p>
  <p>...</p>
  <p>...</p>
  <p>...</p>
  <p>...</p>
  <p>...</p>
  <p>...</p>
</div>

有没有办法用jQuery(或javascript)查询集合的父级,并使用基本规则进行查询:
Return the parent element that contains 4 or more <p> tags

或者

Return a collection of all <p> tags with 4 or more siblings

我可以调用.parent()方法吗?

在我的使用情况下,无法简单地按<div>搜索(不同的id、类,有时甚至没有<div>作为容器)。我需要一种方法来查找一组相关元素,然后找到该集合的父元素。这可能吗?


你需要某种方式来相关这些元素,否则可能会有多个父级。如果有两个容器都至少有四个<p>元素怎么办? - nnnnnn
使用@MrOBrian的答案,您可以使用jQuery的$.each循环遍历集合并构建父级数组。无论哪种方式,我都希望页面上所有包含4个或更多<p>的容器,所以我很满意。 :) - neezer
是的,当然可以建立一个数组。我只是想确保你意识到你可能需要... - nnnnnn
3个回答

5

nth-of-type可能是您正在寻找的内容。类似这样:

$("p:nth-of-type(4)").parent()

那将获取至少有 4 个段落元素的每个元素的集合。

1
它确实可以在旧版本的Internet Explorer上工作;jQuery为这些选择器提供了备选方案。 - user1479055
@Charmander 啊,我的错,我是在考虑 CSS 选择器而不是 jQuery 方面。 - MrOBrian

0
if ($('p').siblings('p').length > 4) 
{
     // Yay!!!
}

正如我在帖子中所说,我不知道 .some_container,因此无法对其进行查询。 - neezer
啊,我错过了那个。已经为您编辑好了。 - JoeCortopassi
这感觉性能不太好,因为我需要在 DOM 中交叉检查每个 p - neezer
哇,真的吗?为什么会这样,你知道吗?这会因JS引擎而异吗? - neezer
肯定会因浏览器而异,我猜在不支持nth-child()的浏览器中,如IE<8,效果会更好。 - JoeCortopassi
显示剩余2条评论

0

我不认为它的性能太好,但比查找所有p标签并检查同级要快得多:

var parents = $("div").filter(function() {
    return $(this).children('p').length > 4;            
});

这对我也不起作用,因为我不知道我的容器是否总是一个“div”(正如我在帖子中所说)。 - neezer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接