2010-07-08 35 views
26

Tôi đã có một cái gì đó tương tự như đoạn mã sau:jquery loại bỏ plugin từ yếu tố

$(a).click(function() { 
    $(element).plugin(); 
}); 

Có cách nào để loại bỏ một plugin từ một yếu tố khác hơn là sử dụng $($.plugin).remove()? Không chắc chắn nếu tôi có thuật ngữ chính xác nhưng về cơ bản tôi muốn đặt lại phần tử về trạng thái ban đầu của nó.

Cảm ơn

+0

Tôi khá chắc chắn rằng điều đó hoàn toàn phụ thuộc vào các plugin. Những thứ như hộp thoại jQuery UI bao bọc tất cả các loại rác xung quanh phần tử của bạn và di chuyển nó đến một vị trí khác trong DOM, do đó, chức năng "hoàn tác" sẽ khá khó khăn. – Pointy

+0

ok, cảm ơn! btw, đã có một cái nhìn nhanh chóng tại blog của bạn http://whatthepointy.blogspot.com/ và nói rằng nó không thể được tìm thấy ... –

Trả lời

12

Bạn sẽ phải biết plugin sẽ làm gì để đảo ngược hiệu ứng của plugin. Nhiều plugin bổ sung thêm các phần tử vào DOM, các trình xử lý cho các phần tử, vv Nếu plugin không tạo thêm bất kỳ phần tử nào, bạn có thể chỉ cần thực hiện clone (không có dữ liệu và sự kiện) và thay thế hoặc thậm chí chỉ unbind tất cả các trình xử lý sự kiện , nhưng đó không phải lúc nào cũng hiệu quả. Nó sẽ rất phụ thuộc vào các plugin trong câu hỏi.

+1

Vâng, tôi nghĩ rằng sự đồng thuận chung là xem xét các plugin đầu tiên. Chúc mừng –

4

Trừ khi plugin cung cấp chức năng đó, có thể không thể thực hiện dễ dàng. Bạn sẽ phải điều tra những gì các plugin nào, và đặc biệt hoàn tác những thứ đó - hoặc lưu trữ một bản sao của phần tử không cắm vào để thay thế nó sau này.

+0

cảm ơn, tôi sẽ có một cái nhìn vào những gì các plugin đang làm chi tiết hơn .. –

15

Đây là giải pháp bẩn của tôi:

$('#myWidget,#myWidget *').unbind().removeData(); 
+2

Điều này làm việc hoàn hảo .. –

+0

Giải pháp hoàn hảo! Tôi đã bỏ lỡ hàm removeData(). –

+0

nhưng cũng lưu ý rằng removeData() sẽ xóa thuộc tính dữ liệu 'any' được đính kèm với phần tử. nếu bạn biết những gì đạo cụ dữ liệu nó được gắn, nó là thực hành tốt hơn để loại bỏ chúng để thay thế. –

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