这里 jsFiddle 来测试示例
我目前正在编写一个 jQuery 片段来处理 DOM 中由任何 jQuery“触发”的任何 html 内容更改domManip
功能(扩展一些功能)。不确定这是最好的方法,所以欢迎任何建议。
如果绑定到文档,此代码片段将按预期工作。但是,如果我尝试将其绑定到特定元素,我将面临一些功能为的问题.remove()
。也许是由于自定义事件没有使用正常的传播行为,但我真的不确定。
这是一个工作示例,我绑定contentChange
事件记录,跨浏览器工作,我可以测试它:{Win7下的Firefox,IE9,Chrome和Safari}
;
(function ($) {
$.fn.contentChange = function (types, data, fn) {
return this.on('contentChange', types, null, data, fn);
};
var oDomManip = $.fn.domManip,
oHtml = $.fn.html,
oEmpty = $.fn.empty,
oRemove = $.fn.remove,
extendFct = function (oFct, sender, args) {
return oFct.apply(sender, args), $.event.trigger('contentChange');
//=>if testing specific element (#test) use instead following line
//return oFct.apply(sender, args), $(sender).trigger('contentChange');
};
$.fn.domManip = function () {
extendFct(oDomManip, this, arguments)
};
$.fn.html = function () {
extendFct(oHtml, this, arguments)
};
$.fn.empty = function () {
extendFct(oEmpty, this, arguments)
};
$.fn.remove = function () {
extendFct(oRemove, this, arguments)
};
})(jQuery);
I use: $.event.trigger('contentChange')
触发自定义事件。
像这样称呼:
$(document).contentChange(function () {
console.log("onContentChange")
});
但是,如果我使用:
$('#test').contentChange(function () {
console.log("onContentChange")
});
自定义事件不会被触发。
因此,要在特定元素上触发自定义事件,我可以像这样触发它:
$(sender).trigger('contentChange');
但现在,请致电remove()
自己或孩子的方法不会触发我的自定义事件。
我可以理解,如果删除元素,事件回调函数将不会被调用,但是为什么在删除子元素时不调用它(虽然它在绑定到文档时工作!)?
I was 期待这条线定制事件气泡去测试':
$('#test').find('div:first').remove();
在操作该元素和/或其子元素时,有什么方法可以触发绑定到特定元素的自定义事件?