2012-02-07 96 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()它不起作用。我必須在*和:字符之間留出空格。

快樂編碼。

相關問題