jQuery移除元素自动解绑事件实现思路及代码 |
本文标签:移除元素,解绑事件 世界本该如此! 复制代码 代码如下: define([jquery, underscore], function () { var bindDirects = [delegate, bind,on, hover, blur, change, click, dblclick, focus, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, resize, scroll, select, submit]; var eMarker = _addedEvent; _.each(bindDirects, function (eventName) { var alias = $.fn[eventName]; $.fn[eventName] = function () { var $tar = _.isElement(this)?$(this):this; var hasEventAdded = $tar.attr(eMarker) || ; var _en = eventName; if (hasEventAdded.length) { _en += , + hasEventAdded; } $tar.attr(eMarker, _en); return alias.apply(_.isElement(this)?$tar:this, [].slice.call(arguments)); }; }); // 为某一个元素移除绑定的事件 function removeEvents($tar) { var addedEventsName = $tar.attr(eMarker); if (addedEventsName) { addedEventsName.replace(/[^,]+/g, function (eventName) { // 全部移除 if (eventName === delegate) { $tar.undelegate(); } else { $tar.unbind(); } return eventName; }); } } var funcs = [html,empty]; _.each(funcs, function (func) { var alias = $.fn[func]; $.fn[func] = function () { var $tar = _.isElement(this)?$(this):this; if($tar.length){ $tar.find(*[ + eMarker + ]).each(function (k, subEl) { try{ removeEvents($(subEl)); }catch(e){ console.error(e.message); } }); } var args = [].slice.call(arguments); return alias.apply($tar, args); }; }); // 扩展remove()方法 var alias = $.fn.remove; $.fn.remove = function () { var $tar = _.isElement(this)?$(this):this, arg = arguments; if($tar.length && !arg.length){ $tar.find(*[ + eMarker + ]).each(function (k, subEl) { try{ removeEvents($(subEl)); }catch(e){ console.error(e.message); } }); } if(arg.length){ var selector = arg[0]; if(_.isString(selector)){ $tar.find(selector).each(function(k,curEl){ var $cur = $(curEl); $cur.find(*[ + eMarker + ]).each(function (k, subEl) { try{ removeEvents($(subEl)); }catch(e){ console.error(e.message); } }); removeEvents($cur); $cur.remove(); }); } } var args = [].slice.call(arguments); return alias.apply($tar, args); }; }); 还是那句话,了解的越多,你能做的就越多! |