2012-02-07 98 views
11

我试图删除整个身体的所有内容,除了单个元素及其子元素。我怎样才能做到这一点?jQuery - 选择除了单个元素及其子元素之外的所有元素?

编辑1 考虑下面的标记:

<html> 
    <body> 
     <div id="div1"></div> 
     <div id="div2"> 
     <div id="elementNotToRemove"></div> 
     </div> 
     <div id="div3"></div> 
     <div id="div4"></div> 
    </body> 
</html> 

在上面的例子,我想删除DIV1,DIV3和DIV4,以及他们的孩子,但节约DIV2,因为它包含的元素不要删除。

回答

19
$("body > *").not("body > #elementtokeep").remove(); 

您可以替换为任何你想要保持

+0

但是如果元素的深度比身体的直接子女更深,会怎么样? – 2012-02-07 08:43:40

+0

删除元素也将删除所有的孩子 – 2012-02-07 09:07:56

+0

是的,但这不是我的意思。我在最初的调查中澄清了一点。 – 2012-02-07 09:39:34

4

的不()部分你可以这样说:

$('body > *:not(#dondelete)').remove(); 

如果你的元素有id="dondelete",是身体的孩子。

1

尝试

$('body > *:not(#123)').remove() 

http://api.jquery.com/not-selector/

+0

谁赞扬这些?这只会选择'body'元素本身。 – kapa 2012-02-07 09:32:28

+0

@bazmegakapa测试和更正 – 2012-02-07 09:57:55

+1

现在它与其他(已经正确)的解决方案相同,所以删除你的解决方案是公平的。我虽然删除了downvote。 – kapa 2012-02-07 11:30:57

3

这是一个老问题,但接受的答案是错的。它在这种情况下不起作用(见http://jsfiddle.net/LVb3V/),当然不是一个通用的解决方案。

最好使用:

$('body *').not('#div2, #div2 *').remove()​;

这将删除除DIV2身体内的所有元素和它包含的所有元素。

+1

谢谢!这应该是可以接受的解决方案。这里最大的区别是jquery“。不是“而不是在选择器中不使用。 – 2017-01-12 14:10:47

0

我认为

$("body *").not("body #div2") 
      .not("body #div2 #elementtokeep") 
      .not("body #div2 #elementtokeep *") 
      .remove(); 

是关注它的最简单的方法。

http://jsfiddle.net/6vb2va6g/

0

此代码适用于我。

$('body > * :not(#123)').remove() 

您需要在*和之间留出空格。早些时候尝试使用代码

$('body > *:not(#123)').remove()它不起作用。我必须在*和:字符之间留出空格。

快乐编码。

相关问题