jQuery - 选择除单个元素及其子元素之外的所有内容?

时间:2012-02-07 08:27:00

标签: 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,因为它包含不要删除的元素。

6 个答案:

答案 0 :(得分:23)

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

您可以将not()部分替换为您要保留的内容

答案 1 :(得分:5)

你可以这样做:

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

你的元素有id="dondelete"并且是身体的孩子。

答案 2 :(得分:5)

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

最好使用:

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

除了div2及其包含的所有元素之外,这将删除正文中的所有元素。

答案 3 :(得分:1)

尝试

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

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

答案 4 :(得分:0)

我认为

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

是最简单的关注方式。

http://jsfiddle.net/6vb2va6g/

答案 5 :(得分:0)

这段代码对我有用。

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

你需要在*和:之间给出空格。之前尝试使用

代码时

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

快乐的编码。