2015-04-06 133 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

相關問題