使用jQuery删除一个没有子元素的div

17

我该如何使用jQuery删除一个没有子元素(至少没有非空白子元素)的特定div?例如:

<div id="outer">
    some content
    <div id="removeme"> 


    </div>
    some more content
</div>
想要完全删除id为"removeme"的div。
7个回答

50

要删除 id 等于 removeme 的元素:

$("#removeme").remove();

只有在其为空时,才删除具有等于removemeid元素:

$("#removeme:empty").remove();

要删除所有空的 <div> 标签:

$("div:empty").remove();

编辑:如果它不是空的,但有空白字符:

if($.trim($("#removeme").text()) == "") {
  $("#removeme").remove();
}

1
我认为他只是通过给它一个id来引用那个div,但实际上他想要删除页面上所有空的div...这只是我的猜测。 - Luca Matteis
嗯,实际上这不起作用。空白空间被视为子元素了吗? - FlyByQuestionGuy
我猜如果你将div标记更改为自闭合,:empty就会起作用:<div id="removeme"/>。 - Samantha Branham
不,即使它有非空白的子节点,该操作也会删除该节点。 - FlyByQuestionGuy
恭喜你,最后一次成功了!谢谢Ben。 - FlyByQuestionGuy
显示剩余6条评论

8

我选择了:

$('#outer > div').filter(function (index) { 
    return $(this).children().length < 1; 
}).remove();

这段话的意思是:

  • 给我 #outer 的所有 div 子元素
  • 使用过滤器来除去任何具有子节点的元素
  • 删除我们仍然选择的任何元素

不幸的是,如果 div 包含文本,这将会删除它,这可能不是原始帖子作者想要的。纯文本不算作子节点。


2

所以 $('div#removeme:empty').remove() 只会移除那个节点? - FlyByQuestionGuy
是的,只有当它没有子元素或内部文本时。 - Samantha Branham
如果它有内部文本(即使是空格),也要返回翻译后的文本。 - FlyByQuestionGuy
不会选择它或删除它。 - Jonathan

0

如果父元素没有特定类的子元素,则删除父元素

$('.parentClass:not(:has(.childClass))').remove();

0

我想你需要这个:

$('div#outer div:empty').remove();

它将删除div#outer节点内的所有空div


0

如果一个元素是空的且拥有子元素,你可以指向其子元素并移除其父元素。这个过程不考虑空格,只要元素为空就会被移除。

例如:如果li为空,则会移除#removeme元素。

if (!$("#tabs ul li").length) $('#tabs').remove();

0

我找不到一个可以忽略文本节点的选择器,所以这是我能想到的最快/最脏的代码片段。

$("#header").each(function() { 
    if($(this).children().length < 1) 
        $(this).remove() 
});

你能为我们解释一下吗? - FlyByQuestionGuy
这里,我们选择一个不是父元素的 div。(没有子元素)请参阅 jQuery 选择器文档:http://docs.jquery.com/Selectors - Samantha Branham
我不想选择并删除每个没有子元素的 div。 - FlyByQuestionGuy
你问如何使用jQuery删除一个没有子元素的div。在这种情况下,只需使用$("#removeme").remove()。 - Samantha Branham
这似乎没有检查它是否有子元素。 - FlyByQuestionGuy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接