Here’s how to remove all instances of all plugins from an element if the plugin does not include a destroy
method:
$.removeData($element.get(0));
This will not remove the bound events. You have to do that separately.
If the plugin you’re trying to remove has namespaced events, you’re in luck:
// Remove namespaced events added using .on() $element.off('pluginNamespace'); // Remove namespaced events added using .bind() $element.unbind('.pluginNamespace');
If not, you can examine all of the events attached to an element:
console.log( '$element events:', $._data($element.get(0), 'events') );
Here’s all wrapped up in a handy function:
var destroyCrappyPlugin = function($elem, eventNamespace) { var isInstantiated = !! $.data($elem.get(0)); if (isInstantiated) { $.removeData($elem.get(0)); $elem.off(eventNamespace); $elem.unbind('.' + eventNamespace); } };