我需要选择没有子节点的元素(包括文本,因为在< p>文本中是一个子节点)。
我使用空,但它也考虑空间作为子节点。
例:
标记:
<span> </span> <span></span>
脚本:
$("span:empty").html("this was empty!");
不幸的是,只有第二个元素被选择和改变,因为第一个元素有空间,它被认为是子节点。
解决方法
怎么样
$("span:not(:has(*))")
选择没有子级的所有跨度。
说明
:has()
选择器“选择包含至少一个与指定选择器匹配的元素的元素。通配符*表示所有元素。
The expression
$('div:has(p)')
matches a<div>
if a<p>
exists
anywhere among its descendants,not just as a direct child.
:not()
选择器“选择与给定选择器不匹配的所有元素。
在这种情况下,:has()选择所有的东西,然后我们使用:not()来找到不匹配“everything”的元素…换句话说,什么也没有。