2017-07-15 16 views
1

bodyに別のスクリプトがdivを追加するたびに、特定の関数を呼び出せます。MutationObserverで全身をどのように観察できますか?

私が試み:

var dom_observer = new MutationObserver(function(mutation) { 
    console.log('function called'); 
}); 
var container = document.body; 
console.log(container); 
var config = { attributes: true, childList: true, characterData: true }; 
dom_observer.observe(container, config); 

をIは、(上記の例)document.bodyおよびdocument.querySelector('body')containerを設定しようとしました。どちらの場合も、console.log()nullと表示され、次のエラーが表示されます。TypeError: Argument 1 of MutationObserver.observe is not an object.divbodyに追加されたときにコールバック関数が呼び出されませんでした。

document.getElementsByTagName("body")[0]document.documentElement.childNodes[1]に設定しようとしました。どちらの場合も、console.log()undefinedと表示され、コールバック関数は呼び出されませんでした。

+1

をこのスクリプトを呼び出している場合は?その時あなたのDOMはロードされていますか? 'console.log(document.body)'が 'null'を出力した場合、それはあなたがHTML文書にないか、マークアップの構文解析が' 'にしかないことです。 Ps:DOM解析やさまざまな負荷イベントにまだ慣れていない場合は、Mutation Observerの学習を少し遅らせると、必要がなくてもチャンスが大きいでしょう。 – Kaiido

+0

ありがとう、それは解決策でした。私は 'jQuery(document).ready(function {...});'の中にコードを入れなければなりませんでした。すべてが修正されました。これを質問の回答として投稿することができます。 –

答えて

1

ターゲットをdocumentとし、containerではないという問題があります。これがブラウザ間で互換性があることを確認するには、document.documentElementdocument.bodyを使用してください。以下は動作するはずです:

var dom_observer = new MutationObserver(function(mutation) { 
    console.log('function called'); 
}); 
var container = document.documentElement || document.body; 
console.log(container); 
var config = { attributes: true, childList: true, characterData: true }; 
dom_observer.observe(container, config); 

Working JSFiddle

+0

なぜdownvote? –

+0

私はダウンボートしませんでしたが、これはうまくいきません - あなたのフィドルでさえ表示されますので、 –

+0

@RoryMcCrossan本当にフィドルが動作します。 'container'の代わりに' document'を使うときはコンソールを見てください。私はその後、体に何かを加えることでそれをテストしました。 –

関連する問題