注意dom元素的创建?

时间:2012-11-03 12:31:11

标签: javascript jquery jquery-ui dom

所以,基本上我有一个插件,我希望在一个元素上调用它,如果它是在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.

这可能吗?

5 个答案:

答案 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,因此可以安全地在那里附加事件   等待文件准备好。