2010-06-22 44 views
91

Sự khác biệt giữa các phương pháp empty()remove() trong jQuery là gì và khi nào chúng ta gọi bất kỳ phương pháp nào trong số này, các đối tượng được tạo sẽ bị hủy và bộ nhớ được giải phóng?jQuery rỗng() vs remove()

Trả lời

145
  • empty() sẽ xóa tất cả nội dung của lựa chọn.
  • remove() sẽ xóa lựa chọn và nội dung của nó.

xem xét:

<div> 
    <p><strong>foo</strong></p> 
</div> 

$('p').empty(); // --> "<div><p></p></div>" 

// whereas, 
$('p').remove(); // --> "<div></div>" 

Cả hai loại bỏ các đối tượng DOM và nên giải phóng bộ nhớ chúng chiếm, vâng.

+1

Điều gì về xử lý sự kiện? Tôi có một trường hợp lạ, nơi trống + nối thêm hai lần, với các phụ thêm khác nhau gây ra tập thứ hai của các mục được nối thêm để thực hiện các trình xử lý của tập đầu tiên. – Killroy

+0

@ quá muộn, nhưng họ cũng loại bỏ trình xử lý. có một cơ hội mà bạn có các trình xử lý đó được đăng ký với một hàm như 'live' hoặc' delegate'. – undone

48

Tài liệu giải thích rất rõ. Nó cũng chứa các ví dụ:

trước:

<div class="container"> 
    <div class="hello">Hello</div> 
    <div class="goodbye">Goodbye</div> 
</div> 

lệnh .remove():

$('.hello').remove(); 

sau:

<div class="container"> 
    <div class="goodbye">Goodbye</div> 
</div> 

trước:

<div class="container"> 
    <div class="hello">Hello</div> 
    <div class="goodbye">Goodbye</div> 
</div> 

.empty():

$('.hello').empty(); 

sau:

<div class="container"> 
    <div class="hello"></div> 
    <div class="goodbye">Goodbye</div> 
</div> 

Theo như bộ nhớ là có liên quan, một khi một ele ment được loại bỏ khỏi DOM và không có thêm tham chiếu đến nó, bộ thu gom rác sẽ lấy lại bộ nhớ khi nó chạy.

+0

Câu trả lời hay ... thnx :) – Bhupi

+0

trống sẽ không chạm vào thuộc tính của bộ chọn. Nếu bạn muốn loại bỏ các thuộc tính của phần tử selector, tôi nhận thấy rằng jQuery removeAttr và removeClass là lỗi trong firefox. Vì vậy, tùy chọn tôi đã có là sử dụng phương thức remove và thêm phần tử container một lần nữa, sau đó nối thêm các nút con cho cùng. – randominstanceOfLivingThing

+0

tương tự như vậy bạn có thể giải thích tách() cũng với tương ứng của hai bên trên .... – Krish

1

$("body").empty() - nó loại bỏ các yếu tố HTML DOM bên trong thẻ nội dung -

khi bạn khai báo $("body").remove() - nó loại bỏ toàn bộ DOM HTML cùng với TAG cơ thể.

+15

Câu trả lời này cung cấp những gì đang thiếu trong các câu trả lời hiện có đã tồn tại trong ba năm? – jcsanyi