2012-02-07 37 views
11

Tôi đang cố gắng loại bỏ mọi thứ trong toàn bộ cơ thể, ngoại trừ một yếu tố duy nhất và các con của nó. Làm thế nào tôi có thể thực hiện điều này?jQuery - Chọn mọi thứ ngoại trừ một phần tử và con của nó?

Sửa 1 Hãy xem xét các đánh dấu sau:

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

Trong ví dụ trên, tôi muốn loại bỏ div1, div3 và div4, cũng như con cái của họ, nhưng bảo tồn div2 vì nó chứa các phần tử không phải để loại bỏ.

Trả lời

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

Bạn có thể thay thế một phần không() với bất cứ điều gì bạn muốn giữ

+0

Nhưng điều gì sẽ xảy ra nếu độ sâu của các phần tử sâu hơn so với chỉ các con trực tiếp của cơ thể? –

+0

Xóa một phần tử cũng sẽ xóa tất cả các trẻ em –

+0

Có, nhưng đó không phải là ý của tôi. Tôi đã làm rõ một chút trong nhiệm vụ ban đầu. –

4

Bạn có thể làm điều đó như thế này:

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

đâu yếu tố bạn có id="dondelete" và là con của cơ thể .

1

Hãy thử

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

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

+0

Ai sẽ vượt qua những điều này? Điều này sẽ chỉ chọn chính phần tử 'body'. – kapa

+0

@bazmegakapa đã kiểm tra và sửa chữa –

+1

Bây giờ, nó cũng giống như các giải pháp khác (đã chính xác) được đăng trước đó, vì vậy sẽ công bằng nếu bạn xóa các giải pháp của mình. Tôi loại bỏ các downvote mặc dù. – kapa

3

Đây là một câu hỏi cũ, nhưng câu trả lời được chấp nhận là sai. Nó không hoạt động trong tình huống này (xem http://jsfiddle.net/LVb3V/) và chắc chắn không phải là một giải pháp chung.

Tốt hơn để sử dụng:

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

Điều này sẽ loại bỏ tất cả các yếu tố trong cơ thể ngoại trừ div2 và tất cả các yếu tố mà nó chứa.

+1

Cảm ơn bạn! Đây phải là giải pháp được chấp nhận. Sự khác biệt lớn ở đây là jquery ".không phải "thay vì sử dụng không phải trong bộ chọn. –

0

Tôi nghĩ rằng

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

là cách dễ nhất để tập trung nó.

http://jsfiddle.net/6vb2va6g/

0

Mã này làm việc cho tôi.

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

Bạn cần cung cấp khoảng trống giữa * và:. Trước đó khi cố gắng sử dụng mã với

$('body > *:not(#123)').remove() nó không hoạt động. Tôi phải cung cấp khoảng trống giữa * và: ký tự.

Mã hóa vui vẻ.

Các vấn đề liên quan