2015-04-06 134 views
0

将dom节点添加到文档时,是否有任何好方法来获取警报?如果你将javascript节点放在一起,通常你把它们放在一起,这样你就不会一直在回流。但是这意味着当添加元素时,它们在页面上不可见,这意味着有关它们的某些信息是不可访问/错误的。例如offsetWidth在添加到文档流之前将为0,无论其添加后的宽度如何。如何知道何时将dom节点添加到文档中?

所以我理想上喜欢某种方式来获得一个事件,当一个节点被添加到文档中时,我可以做一些事情,需要offsetWidth和其他类似的东西,需要它被渲染。

回答

0

使用突变观察者进行观察document应该是在大多数情况下使用合理的刀具(它可能不是合理的,如果你设立旨在听的很长一段时间的监听器):

 var observer = new MutationObserver(function(mutations) { 
      mutations.forEach(function(mutation) { 
       if(mutation.target.contains(block.domNode)) { 
        // do your thing, then.. 
        observer.disconnect() 
       } 
      }) 
     }) 
     observer2.observe(document, {childList: true, subtree: true}) 

请注意,如果从文档中删除了dom节点,然后重新插入,上面的代码将无法捕获(但可以修改为)。

+0

请记住,突变观察者在IE和Opera中的功能非常有限(如果有的话)。 http://caniuse.com/#feat=mutationobserver – zfrisch

+0

实际上,突变观察者看起来像是所有主流浏览器的最新版本。但是,是的,支持11岁以上版本的IE需要其他东西。 –

+1

你是对的。我应该更具体。我总是试着去,至少,1代回到IE。话虽如此,我认为在这种情况下,你必须举手说“你能做什么?”。 – zfrisch

相关问题