jQuery rỗng () so với remove ()


99

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

Câu trả lời:


160
  • empty() sẽ làm trống vùng chọn nội dung của nó, nhưng vẫn giữ nguyên vùng chọn.
  • remove()sẽ làm trống lựa chọn nội dung của nó xóa chính lựa chọn.

Xem xét:

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

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

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

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


Dưới đây là các liên kết đến tài liệu, cũng chứa các ví dụ:


1
Điều gì về người xử lý sự kiện? Tôi gặp một trường hợp kỳ lạ khi trống + nối thêm hai lần, với các phần nối khác nhau khiến tập hợp các mục nối thêm thứ hai thực thi các trình xử lý của tập hợp đầu tiên.
Killroy

1
@ quá muộn, nhưng họ cũng loại bỏ trình xử lý. có khả năng là bạn đã đăng ký những trình xử lý đó với một hàm như livehoặc delegate.
hoàn tác

55

Tài liệu giải thích nó rất tốt. 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>

.tẩy():

$('.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>

.trống():

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

sau:

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

Liên quan đến bộ nhớ, một khi một phần tử bị xóa khỏi DOM và không còn tham chiếu đến nó, bộ thu gom rác sẽ lấy lại bộ nhớ khi nó chạy.


trống sẽ không chạm vào các thuộc tính của bộ chọn. Nếu bạn muốn xóa các thuộc tính của phần tử bộ chọn, tôi nhận thấy rằng jQuery removeAttr và removeClass bị 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 lại phần tử vùng chứa sau đó nối các nút con vào cùng.
randominstanceOfLivingThing 12/1213

Tóm tắt hoàn hảo, điều này giải thích nó rất tốt! Đối với tôi thậm chí còn tốt hơn câu trả lời được chấp nhận.
JonSnow

2

$("body").empty() - nó 'xóa các phần tử DOM HTML bên trong thẻ body -

khi bạn khai báo $("body").remove() - nó xóa toàn bộ HTML DOM cùng với TAG nội dung.


17
Câu trả lời này cung cấp điều gì còn thiếu trong các câu trả lời hiện có ở đây trong ba năm?
jcsanyi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.