空选择器 表示:匹配所有没有子元素(包括文本节点)的元素。
查找所有为空的元素 - 它们没有子元素或文本。
我想要获取那些没有子元素但可能包含文本的元素,怎么做呢?
更新:
例如:
我想选择那些没有子元素但可能包含文本的元素,用这样的语法:
$('div:empty, a:empty, span, p:empty, td:empty, img, input').mousemove(myMouseOverHandler);
空选择器 表示:匹配所有没有子元素(包括文本节点)的元素。
查找所有为空的元素 - 它们没有子元素或文本。
我想要获取那些没有子元素但可能包含文本的元素,怎么做呢?
更新:
例如:
我想选择那些没有子元素但可能包含文本的元素,用这样的语法:
$('div:empty, a:empty, span, p:empty, td:empty, img, input').mousemove(myMouseOverHandler);
获取没有其他元素的任何元素:
$('*:not(:has(*))');
如果一个元素只有文本,children()
的长度将为 0
:
<div id="test1">
Hello World
</div>
<div id="test2">
<b>Hey there</b>
</div>
<script>
alert($("#test1").children().length); // alerts 0
alert($("#test2").children().length); // alerts 1 (the bold tag)
</script>
编辑:根据您的编辑,jQuery非常棒,可以让您创建自定义过滤器:
$.expr[':'].emptyOrText = function(e) {
return $(e).children().length == 0;
};
因此,使用上述代码对上面的HTML进行操作,您可以执行以下操作:
$('div:emptyOrText'); // will select #test1
const getElementsWithNoChildren = (target) => {
let candidates;
if (target && typeof target.querySelectorAll === 'function') {
candidates = target.querySelectorAll('*');
}
else if (target && typeof target.length === 'number') {
candidates = target;
}
else {
candidates = document.querySelectorAll('*');
}
return Array.from(candidates).filter((elem) => {
return elem.children.length === 0;
});
};
has
不需要知道如何处理not
。更好的是,not(*)
到底意味着什么?它将如何转化为我们想要的内容?无论如何,这个答案非常棒,因为它救了我一命。 - Steven Lu