如何使用JQueryselect没有特定子元素的元素

有没有一个JQueryselect器来select所有没有特定子元素的元素作为直接子元素? 例如:

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

我想只select第一个(没有<div>子)。 这可能吗?

进一步的信息:其实我试图插入一个<div>所有那些没有一个这样的expression式的<p>

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

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

你可以尝试:

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

您可以将:has() [docs]select器与not函数[docs]结合使用以实现此目的:

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

或者,您可以使用:not() [docs]select器来使用单个select器:

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

你可以互换使用,但是IIRC,第一个更快。

看到它在jsFiddle上的行动 。

请注意, div是块级元素, p不是。 这意味着这是不是有效的HTML嵌套在一个div中的div

尝试这个

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

文本元素内部的结构元素对我来说看起来很不干净,但是如果你坚持的话)

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

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

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