2016-05-05 12 views
1

eが作成されるとすぐに$(e).append()を使用します。JQuery作成するとすぐに親に追加する

私はそれを使用することができます知っている:setTimeout(/*func checking if parent exists*/, 100)しかし、私は本当に悪いアイデアを見つける。 DOM要素のサブツリーが変更されたときに発生する、ある種のDOMイベントがありますか?

私は通常、ソースコード、親を作成する関数に貼り付けますが、実際にはChrome拡張機能を実際に作成しているため実際には不可能です。私はあなたはそれが本当に使いやすいです見ることができるようにArrive.js

// watch for creation of an element which satisfies the selector ".test-elem" 
$(document).arrive(".test-elem", function() { 
    // 'this' refers to the newly created element 
    var $newElem = $(this); 
}); 

// the above event would watch for creation of element in whole document 
// it's better to be more specific whenever possible, for example 
$(".container-1").arrive(".test-elem", function() { 
    var $newElem = $(this); 
}); 

存在する要素を待っているため、このライブラリを使用することになり、あなたの助け

+0

ん「E」であると仮定しますか? – Grommy

+0

親にmutation observerを使用して、すべてが追加されていることを確認できます(https://developer.mozilla.org)。$(window).load(function(){ .... }/ja/docs/Web/API/MutationObserver –

+0

@Glumyいいえ、それはajaxの結果に応じて動的に作成されます –

答えて

1

ため

感謝。外部ライブラリを使用したくない場合はDOMNodeInsertedが償却されるので、MutationObserverをJSで探す必要があります。ライブラリをアンバインド

は、ドキュメントに示されているように簡単です:

// unbind all arrive events on document element 
$(document).unbindArrive(); 

// unbind all arrive events on document element which are watching for ".test-elem" selector 
$(document).unbindArrive(".test-elem"); 

// unbind only a specific callback 
$(document).unbindArrive(callbackFunc); 

// unbind only a specific callback on ".test-elem" selector 
$(document).unbindArrive(".test-elem", callbackFunc); 

// unbind all arrive events 
Arrive.unbindAllArrive(); 
+0

うーん、それは非常に興味深い、私は秒でそれをテストします –

+0

このライブラリの問題を解決してから数年経っているようなことをやっていて、 '突然変異観測者(Mutation Observer) 'と一緒にいじくるのではなく、プロジェクトを早く進めることができました。 JSはMutation Observer上に構築されているので、素晴らしいサポートが得られます。 – Riddell

+0

クローム拡張スクリプトにコードを入力すると問題がありますが、クロムデバッガに入力すると機能しますか? –

0

eは、いくつかの静的なHTMLの一部である場合、あなたは一般的な使用することができます:eがによって動的に追加されている場合は

$(document).ready(function(){ 
    //code here 
} 

をあなたのコードはDOMNodeInsertedイベントを使用することができます。この例のために私はeは、すべてのページがロードされるときに作成され<li>

$(document).on('DOMNodeInserted', 'li', function(){ 
    //code here 
}); 
関連する問題