2016-05-30 12 views
1
document.getElementById('my_id').innerHTML = 'A message'; 
// Next should only be executed once DOM manipulation has completed 
.. do some stuff 

これは、jQuery/Javascript - How to wait for manipulated DOM to update before proceeding with functionを見てきました。これはsetTimeOutを使用することを示しています。DOM操作が完了した後にのみ実行を続ける

document.getElementById('my_id').innerHTML = 'A message'; 
setTimeout(function(){ 
    .. do some stuff 
},10); 

しかし、これは私が好きではないレースです。私は確かにする必要があり、待っている時間を無駄にしたくない。コメントの1つは、それがキューに入れられ、DOM操作が完了した後にのみ実行されることが保証されているので、0msでも機能すると述べています。それは絶対に確かですか?もしそうなら、この状態はどこですか?

(この操作は、この例よりも複雑ですが、挿入されたHTMLには独自のjavascriptが含まれていることもあります)。

+0

レンダリングフェーズが検出されたばかりの場合は、適切なイベントを待機してください。 – pietro909

+0

どのようなイベントですか?これは最初の読み込みではなく、JSによるDOM操作です。 – user984003

+0

私の答えをお読みください:DOMを変更すると(ノードの追加、ノードの削除など)、いくつかのイベントが発生します。あなたのことを探して聞いてください:-) – pietro909

答えて

1

レガシーWeb eventsまたはそれより新しいMutation observerの両方を使用できます。

DOMを操作するたびに、ロードするイベントだけでなく、いくつかのイベントがトリガーされます。

この例ではHTMLを挿入しているため、少なくともDOMNodeInsertedイベントを受信する必要があります。

+0

数多くのイベントのある長い長いWebページにリンクしているのは、本当にその質問に答えているわけではありません。 – user984003

+0

so:JSで行っているDOM操作は何ですか? – pietro909

+0

他の要素に大きな文字列のHTMLを挿入しています。 – user984003

1

他のアクションのイベントリスナーから他のイベントをトリガーする必要があります。基本的にこのようなことができます

$(".button").click(function(){ 
// perform your actuibs and do some interesting stuffs 
$(".anotherButton").click() 
}) 

$(".anotherButton").click(function(){ 
// the other actions that needs to be performed after the first button clicked 
}) 
関連する問題