所以,基本上我有一个插件,我希望在一个元素上调用它,如果它是在dom中创建的,
E.g。假设我有一个名为domWatch的插件,如果指定的选择器在调用它的选择器内创建,则运行该函数。
这样:
$('#container').domWatch('.mySelector', function(element){
$(element).myPlugin();
});
$('#container').append($('<div />', {class: 'mySelector'})); //the new element should now have the myPlugin plugin called on it.
这可能吗?
答案 0 :(得分:5)
您可以使用我为相同目的开发的arrive.js库(在内部使用Mutation Observers)。用法:
$('#container').arrive('.mySelector', function(){
$(this).myPlugin();
});
答案 1 :(得分:3)
看看这个聪明的黑客:http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/。它使用CSS3动画来检测元素何时插入DOM。
“在创建DOM元素时进行侦听”的问题是性能损失,因此您可能应该考虑采用不同的方法来解决问题。
我确信有很多方法可以实现你的目标。
答案 2 :(得分:1)
听起来很像Live Query.虽然这确实涉及连续轮询,但确实会受到影响。
以下是一些demos。
答案 3 :(得分:1)
如果您定位的是非常现代的浏览器,那么您可以查看专为此目标设计的 MutationObserver 。
https://developer.mozilla.org/en-US/docs/DOM/MutationObserver
答案 4 :(得分:0)
它似乎是delegated form of the .on()
event的作业:
委派事件的优势在于它们可以处理来自的事件 稍后添加到文档中的后代元素。通过挑选一个保证在当时存在的元素 委托事件处理程序附加,您可以使用委托事件 避免频繁附加和删除事件处理程序的需要。这个 element可以是a中视图的容器元素 例如,模型 - 视图 - 控制器设计,如果事件,则为
document
handler希望监视文档中的所有冒泡事件。该document
元素在之前的文档头部中可用 加载任何其他HTML,因此可以安全地在那里附加事件 等待文件准备好。