如何在 JQuery 中选择没有特定子元素的元素

是否有一个 JQuery 选择器来选择所有 没有有特定子元素作为直接子元素的元素?例如:

<p>
text in paragraph
</p>
<p>
<div>text in div</div>
</p>

我想只选择像第一个一样的 <p>(没有一个 <div>子)

进一步的信息: 实际上我正在尝试将一个 <div>插入到所有那些没有 <p><p>中,通过这样一个表达式:

$('p').wrapInner('<div />')

但是这会给第二个 <p>增加一个额外的 <div>

46968 次浏览

您可以将 :has() < sup > [ docs ] 选择器与 not功能 < sup > [ docs ] 结合起来实现以下功能:

$("p").not(":has(div)").wrapInner("<div/>");

或者,您也可以通过使用 :not() < sup > [ docs ] 选择器来使用单个选择器:

$("p:not(:has(div))").wrapInner("<div/>");

您可以交换使用其中任何一个,但是 IIRC,第一个更快。

请在 jsFiddle 上查看它的实际运行情况。

请注意,div是块级元素,而 p不是。这意味着将 div嵌套在 p中是无效的 HTML。

这似乎工作: $('p:not("p div")')

试试这个:

$("p").filter("not(:has(div))").wrapInner("<div/>");

在我看来,文本元素中的结构元素非常不干净,但如果你坚持的话;)

$('p').not(":has(div)").wrapInner("<div/>");

这里是一个演示: http://jsfiddle.net/NTpES/3/

你可以试试:

$("p:not(:has(>div))")