如何使用 jQuery 选择所有 p 标记,其中至少有一个 a 标记作为直接子级?
对于文档:
<div>
<p><a>My Link</a></p>
<p><div><a>My nested Link</a></div></p>
</div>
它只会返回第一个 p 标签。
如何使用 jQuery 选择所有 p 标记,其中至少有一个 a 标记作为直接子级?
对于文档:
<div>
<p><a>My Link</a></p>
<p><div><a>My nested Link</a></div></p>
</div>
它只会返回第一个 p 标签。
我想你可能不得不使用.filter()
来做到这一点。以下代码应该可以满足您的需求:
$('p').filter(function() { return $(this).children('a').length > 0;});
编辑:修改了演示以包含有效的 HTML(用第二<div>
个<span>
内部的a 替换<p>
)。
$('p:has(a)')
会成功的。
更新
标签的问题font
可以这样解决:
$('p:has(a):not(:has(font))')
更新 2
好吧,把这一切都废了。根据评论,:has()
过滤器不仅仅查看直接子级。那么我们换一种方式如何选择所有a
标签,然后选择父级为 a 的那些标签的父级p
。
$('a').parent('p')
或避免选择a
您可以做的所有标签
$('p > a').parent()
又一次更新
感谢@BoltClock 的建议。以下语法也适用:
$('p:has(> a)')
这很简单:
$("div p:first-child")
您可能需要考虑将 aid
或 a应用class
到 thediv
以将 DOM 遍历限制为仅相关的div
和p
块。
这个答案或多或少是一样的,只是寻找最后一个孩子。
更新对不起,误读了“第一个 p 标签”位。
尝试这个:
$("div p:has(a)")