使用JQuery,当DOM元素调用.remove()时,是否可以运行函数?

正如问题所述,我正在尝试做的是从DOM中删除DOM元素时调用的函数,就像析构函数一样。

我查看卸载,但从我的理解,只有当浏览器导航离开页面时才会调用。

提前致谢!

我不知道你正在寻找的是什么。 不是很漂亮的代码,只是为了展示我想要使用的东西:

 // Just for this script's sake, you'll want to do it differently var body = $("body"); var element = $('#loadingBlock'); // Bind the "destructor" firing event body.bind("elementDeleted", function (element) { // your "destructor" code }); // Trigger the event, delete element, can be placed in a function, overloaded, etc. body.trigger("elementDeleted", element); element.remove(); 

当然有基于直接观看DOM的解决方案,但问题是浏览器兼容性。 您应该查看突变事件 。

可以使用特殊事件来构建删除跟踪。 我创建了一个允许绑定到已removed事件的示例 。 请注意,此方法仅在jQuery启动删除时才有效(例如,调用$(…).remove() )。 对于更通用的解决方案,请使用DOMNodeRemoved但这在IE中不起作用。

要启用对元素的跟踪,请调用$(…).trackRemoval() ,当您删除它或其中一个父元素时,该元素将触发已removed事件。

 // Create a scope so that our variables are not global (function(){ /** * True while unbinding removal tracking */ var isUntracking = false; /** * A reference that is only known here that nobody else can play with our special event. */ var dummy = function(){}; /** * Special event to track removals. This could have any name but is invoked during jQuery's cleanup on removal to detach event handlers. */ jQuery.event.special.elementRemoved = { remove: function(o){ if(o.handler===dummy && !isUntracking){ $(this).trigger('removed'); } } }; /** * Starts removal tracking on an element */ jQuery.fn.trackRemoval = function(){ this.bind('elementRemoved', dummy); }; /** * Stops removal tracking on an element */ jQuery.fn.untrackRemoval = function(){ isUntracking = true; this.unbind('elementRemoved', dummy); isUntracking = false; }; })(); 

jsFiddle包含使用示例代码。

试试这个:

 (function($) { var _remove = $.fn.remove; $.fn.remove = function() { this.trigger('remove'); // notify removal return _remove.apply(this, arguments); // call original }; })(jQuery); 

用法:

 $(element).bind('remove', callback); ... // some time later $(element).remove(); 

请参阅http://jsfiddle.net/alnitak/25Pnn/上的工作示例

您可以随时重载Remove函数(所有javascript对象都可以在运行时动态更改)并将其替换为您自己的函数,该函数会触发您可以用来响应删除的事件。