受け入れられる回答は2014年からのもので、現在は古くなっています。 A setTimeout
が機能するかもしれませんが、最もクリーンではなく、要素がDOMに追加されたことを必ずしも保証するものではありません。
今日、MutationObserverは、要素がDOMに追加されたことを検出するために使用する必要があります。 MutationObserversは現代のすべてのブラウザ(Chrome 26+、Firefox 14+、IE11、Edge、Opera 15+など)で広くサポートされるようになりました。
要素がDOMに追加されると、その実際の寸法を取得できます。
ここでは、MutationObserver
を使用して要素がDOMに追加されたときをリッスンする方法の簡単な例を示します。
簡潔にするために、私はノードを構築してDOMに挿入するためにjQuery構文を使用しています。任意のノードが追加またはdocument
から除去されるたびに
var myElement = $("<div>hello world</div>")[0];
var observer = new MutationObserver(function(mutations) {
if (document.contains(myElement)) {
console.log("It's in the DOM!");
observer.disconnect();
}
});
observer.observe(document, {attributes: false, childList: true, characterData: false, subtree:true});
$("body").append(myElement); // console.log: It's in the DOM!
observer
イベントハンドラがトリガされます。ハンドラ内でcontains
のチェックを実行してmyElement
がdocument
にあるかどうかを確認します。
mutations
に格納されている各MutationRecordを反復処理する必要はありません。myElement
に直接document.contains
のチェックを行うことができます。
パフォーマンスを向上させるには、document
を、DOMにmyElement
を含む特定の要素に置き換えます。
誰かがこの質問を見つけた場合は、良い回答がここにありますhttp://stackoverflow.com/a/5629730/697388ここでhttp://stackoverflow.com/a/850995/697388 –
[表示されているDOMに要素が存在するかどうかを確認しますか?](http://stackoverflow.com/questions/5629684/how-to-check-if-element-exists-in-the-visible-dom) – iConnor
[Is JavaScriptを使用して要素がレンダリングされた時期を判断することはできますか?](http://stackoverflow.com/questions/3667991/is-is-possible-to-determine-when-an-element-has-been-rendered-using -javascript) – Purefan