2011-09-29 33 views
15

Có cách nào chính thức để móc vào jQuery.remove() sao cho một hàm có thể được gọi trước/sau?jQuery remove() gọi lại?

Tôi có một hệ thống nhờ đó các trình xử lý nhất định được đính kèm với các phần tử và đôi khi các thành phần này bị xóa (ví dụ: tiện ích con có phần tử chính bị xóa bởi một số hành động khác trên trang). Nếu trình xử lý có thể được thông báo rằng phần tử chính của chúng đã bị xóa, tôi có thể chạy các quy trình dọn dẹp dễ dàng hơn một chút.

+0

Tôi chỉ cần nhìn vào mã có liên quan, https://github.com/jquery/jquery/blob/master/src/manipulation.js#L168, và nó thực sự chỉ là một wrapper mỏng xung quanh parent.removeChild . Vì vậy, đi với câu trả lời của @ Drew. – Boldewyn

+0

Bạn có tìm thấy bất kỳ công việc nào xung quanh, ngoài việc gói sự kiện xóa ban đầu không? – Mahn

Trả lời

5

Sử dụng sự kiện tùy chỉnh, đính kèm trình xử lý vào sự kiện tùy chỉnh kích hoạt trước/sau khi xóa. Ví dụ,

$(document).bind('remove', function(event, dom){ 

    $(document).trigger('beforeRemove', [ dom ]); 
    $(dom).remove(); 
    $(document).trigger('afterRemove', [ dom ]); 
}); 

$(document).trigger('remove', 'p'); //Remove all p's 
17

bạn có thể sử dụng jQuery.when():

$.when($('div').remove()).then(console.log('div removed')); 
+0

Xin lỗi, có lẽ đó không phải là câu trả lời hay trong trường hợp hiện tại nhưng hữu ích cho tôi. –

+0

Việc này được thực hiện. – tponthieux

+3

Việc này được thực hiện nếu bạn đang tìm cách xóa phần tử * ngay lập tức * và có một cuộc gọi lại sau khi xóa xong. Nhưng loại bỏ sự kiện trong jQuery là một sự kiện đồng bộ, vì vậy cho mục đích này câu trả lời ở đây là dư thừa: bạn có thể đạt được cùng một điều chính xác làm: '$ ('div'). Remove(); console.log ('div removed'); ' – Mahn

2

Dưới đây là một hack tiện lợi - bạn có thể muốn cung cấp cho nó một thử.

$('div').hide(1, function(){ 
    // callback 
    $(this).remove(); 
});