这是我的情景:
<div><br><div>
<div>
line one.
<br>
line two.
</div>
<div><img src="example.jpg"></div>
<div><br></div>
<div><iframe></iframe></div>
<div><br></div>
我需要检查div是否包含NO文本并且有一个br标签然后将其删除。
我试过了:
if ($('div').is(':empty')) {
$('div').remove();
}
我认为这没有用,因为空()并不意味着没有文字。&#34;
我也试过这个:
$('div').filter(function() {
return $.trim($(this).text()) === '';
}).remove();
这很有效,但它删除了包含除文本之外的所有div标签,因此删除了div中的所有图像和任何其他html标记。
我尝试过的最后一件事就是这个,但后来意识到这并没有考虑到div中可能存在的文字。
$('div br:only-child').remove();
我仍然对jquery感到陌生,并为我可能引起的所有人的帮助而道歉。提前致谢!!
答案 0 :(得分:4)
您可以使用jQuery :has()
selector来选择具有div
后代元素的br
元素:
$('div:has(br)').filter(function() {
return !this.textContent.trim();
}).remove();
正如您在问题中提到的,如果您只想删除div
元素,如果br
元素是唯一的子元素,那么您也可以将其与:only-child
selector结合使用:
$('div:has(br:only-child)').filter(function() {
return !this.textContent.trim();
}).remove();
如果可能有多个br
元素,那么您显然不应该使用:only-child
。
更好的方法是检查不是br
元素的兄弟元素的长度。
$('div:has(>br)').filter(function() {
return !this.textContent.trim() && !$('br', this).siblings(':not(br)').length;
}).remove();
在上面的查询中,如果div
元素不包含任何文本且只有后代br
元素,则会删除它。正如评论中所述,如果您只想检查作为直接后代的br
元素,请在初始选择器中使用子组合子>
。
答案 1 :(得分:1)
检查元素的子元素是否仅<br>
,然后检查空文本
$('div:has(br)').filter(function(){
var $div= $(this), $children=$div.children();
// check if all children are <br>
if($children.length === $children.filter('br').length){
// return true or false depending on text
return !$div.text().trim();
}
// children are not all <br>
return false;
}).remove();
答案 2 :(得分:1)
我使用了find和destroy方法:
https://jsfiddle.net/ay4ax3nz/
$("div").each(function(){
if($(this).html() === '<br>' || $(this).html() === '<br />'){
$(this).remove();
}
});