2011-11-14 30 views
9

Tôi có một phần tử có nhiều phần tử con. Tôi muốn xóa nội dung của phần tử này và thay thế nó bằng cấu trúc mới.Phương thức jquery empty() sẽ xóa các trình lắng nghe sự kiện được tạo thông qua các phương tiện không jquery

Các phần tử con được gán với nhiều trình xử lý sự kiện khác nhau và không phải tất cả các trình nghe này đều được tạo thông qua phương thức liên kết jquery.

Nếu tôi sử dụng phương thức trống của jquery để xóa phần tử, nó sẽ loại bỏ tất cả các trình lắng nghe sự kiện hay chỉ xóa các trình nghe được tạo thông qua phương thức jquery bind?

Trả lời

0

nó sẽ không xóa người nghe sự kiện. Nhưng bạn nên sử dụng trình xử lý sự kiện này là sự kiện live(), bởi vì, bạn đang thay đổi động các phần tử DOM.

cho ví dụ:

$('a').live('click', function(){ 
    // your stuff 
}); 

// jQuery 1.7 cần thiết cho đoạn mã sau

$(document).on('click', 'a', function(){ 
    // your stuff 
}); 
+4

Câu trả lời này mâu thuẫn với tài liệu: http://api.jquery.com/empty/ "Để tránh rò rỉ bộ nhớ, jQuery loại bỏ các cấu trúc khác chẳng hạn như dữ liệu và trình xử lý sự kiện từ các phần tử con trước khi tự xóa các phần tử. bạn muốn loại bỏ các phần tử mà không phá hủy dữ liệu hoặc trình xử lý sự kiện của chúng (để chúng có thể được thêm lại sau), hãy sử dụng .detach() thay thế. " – umassthrower

3

Bạn có thể unbind tất cả các thính giả của một đối tượng với .unbind() và rời khỏi params trống

Nếu bạn muốn xóa tất cả các phần tử con của một phần tử. chỉ người dùng $ ("# cha mẹ"). children(). remove();

Với live()die() phương pháp bạn có thể thêm eventhandlers đến các yếu tố đó làm chưa tồn tại được nêu ra. với $ (". element"). ("click", function() {}) thêm chức năng cho tất cả các đối tượng .element hiện có trong HTML của bạn hoặc những đối tượng được thêm vào trong tương lai.

+7

Tài liệu trống() của Jquery nêu rõ điều này. "Để tránh rò rỉ bộ nhớ, jQuery loại bỏ các cấu trúc khác như dữ liệu và trình xử lý sự kiện từ các phần tử con trước khi tự xóa các phần tử." Không nên gọi phương thức empty() là đủ rồi? Tại sao tôi phải gọi unbind? – Mandai

+2

Có thực sự, .empty() sẽ làm tất cả ở trên bởi mười hai, cho mỗi đứa trẻ. Nếu bạn đang sử dụng .empty() bạn không cần phải gọi .ubind(). Nó sẽ unbind sự kiện và xóa tất cả các dữ liệu được lưu trong các nút. – Niels

12

Như nhiều bình luận đã đề cập, các tài liệu jQuery nói rằng rỗng() không thực sự loại bỏ xử lý sự kiện: http://api.jquery.com/empty/

Có lẽ đó không phải là trường hợp khi câu hỏi này đã được đăng, nhưng trang này là người đầu tiên đánh vào Google.

+0

Chỉ cần trải nghiệm điều này, jQuery 1.12 'empty()' thực sự loại bỏ người nghe. – Risadinha

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