是否有一个JQuery选择器来选择不将某个子元素作为直接子元素的所有元素?例如:
<p>
text in paragraph
</p>
<p>
<div>text in div</div>
</p>
我想只选择第一个<p>
(没有<div>
孩子)。 这可能吗?
更多信息:实际上我正在尝试将<div>
插入所有没有<p>
的{{1}}这样的表达式:
$('p').wrapInner('<div />')
但这会为第二个<div>
添加额外的<p>
。
答案 0 :(得分:118)
你可以尝试:
$("p:not(:has(>div))")
答案 1 :(得分:13)
您可以将:has()
[docs]选择器与not
function[docs]合并来实现此目的:
$("p").not(":has(div)").wrapInner("<div/>");
或者,您可以使用:not()
[docs]选择器使用单个选择器:
$("p:not(:has(div))").wrapInner("<div/>");
您可以互换使用,但IIRC,第一个更快。
请注意,div
是块级元素而p
不是。这意味着将div
嵌套在p
中是无效的HTML。
答案 2 :(得分:1)
文本元素中的结构元素看起来非常不洁净,但如果你坚持;)
$('p').not(":has(div)").wrapInner("<div/>");
这是一个演示:http://jsfiddle.net/NTpES/3/
答案 3 :(得分:0)
试试这个:
$("p").filter("not(:has(div))").wrapInner("<div/>");
答案 4 :(得分:-2)
这似乎有效:$('p:not("p div")')