jQuery用于选择具有特定直接子项的标签

时间:2012-05-02 22:59:14

标签: javascript jquery html jquery-selectors

如何使用jQuery选择至少有一个标签作为直接子项的所有p标签?

对于文件:

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

它只返回第一个p标签。

3 个答案:

答案 0 :(得分:1)

我认为您可能不得不使用.filter()来执行此操作。以下代码应该满足您的需求:

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

jsFiddle demo

编辑:修改了演示以包含有效的HTML(将<div>替换为第二个<span>内的<p>

答案 1 :(得分:1)

$(&#39; p:has(a)&#39;)

会做到这一点。

http://jsfiddle.net/xKc8T/

<强>更新

font标记的问题可以修复如下:

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

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

更新2

好的废弃所有这些。根据评论,:has()过滤器不会直接查看直接子项。那么我们如何走另一条路并选择所有a标签,然后选择父级为p的父级。

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

或避免选择您可以执行的所有a标记

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

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

又一次更新

感谢@BoltClock提出这个建议。以下语法也有效:

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

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

答案 2 :(得分:0)

这很简单:

$("div p:first-child")

您可能需要考虑将idclass应用于div,以便将DOM遍历限制为仅相关的divp

This answer is more or less the same thing,只是寻找最后一个孩子。

更新抱歉,误读了'第一个p标签'位。

试试这个:

$("div p:has(a)")