0

如何使用 jQuery 选择所有 p 标记,其中至少有一个 a 标记作为直接子级?

对于文档:

<div>
    <p><a>My Link</a></p>
    <p><div><a>My nested Link</a></div></p>
</div>

它只会返回第一个 p 标签。

4

3 回答 3

1

我想你可能不得不使用.filter()来做到这一点。以下代码应该可以满足您的需求:

$('p').filter(function() { return $(this).children('a').length > 0;});

jsFiddle 演示

编辑:修改了演示以包含有效的 HTML(用第二<div><span>内部的a 替换<p>)。

于 2012-05-02T23:09:24.330 回答
1

$('p:has(a)')

会成功的。

http://jsfiddle.net/xKc8T/

更新

标签的问题font可以这样解决:

$('p:has(a):not(:has(font))')

http://jsfiddle.net/xKc8T/1/

更新 2

好吧,把这一切都废了。根据评论,:has()过滤器不仅仅查看直接子级。那么我们换一种方式如何选择所有a标签,然后选择父级为 a 的那些标签的父级p

$('a').parent('p')

或避免选择a您可以做的所有标签

$('p > a').parent()

http://jsfiddle.net/xKc8T/3/

又一次更新

感谢@BoltClock 的建议。以下语法也适用:

$('p:has(> a)')

http://jsfiddle.net/xKc8T/4/

于 2012-05-02T23:10:36.493 回答
0

这很简单:

$("div p:first-child")

您可能需要考虑将 aid或 a应用class到 thediv以将 DOM 遍历限制为仅相关的divp块。

这个答案或多或少是一样的,只是寻找最后一个孩子。

更新对不起,误读了“第一个 p 标签”位。

尝试这个:

$("div p:has(a)")
于 2012-05-02T23:03:52.960 回答