DOMNodeInserted イベントがあります:
$('button').click(function() {
$('#appendme').append($('<div class="inner">').text(Math.random()));
})
$('#appendme').on('DOMNodeInserted','.inner',function() {
console.log(this);
});
デモ
更新: これは IE では機能しないようです。propertychnage
イベント ハンドラーも試してください ( $('#appendme').on('DOMNodeInserted,propertychange'
) が、確認できる IE がありません。
update2: Domnode* は mdn によると非推奨のようです。代わりにMutationObserverオブジェクトを使用するように指示されています
update3: ここでは、MutationEvents のクロスブラウザー ソリューションはあまりないようです。この回答setTimeOut
を参照してください。イベントがサポートされていて、フォールバックまたは livequery オプションがある場合は、上記のコードを使用することをお勧めします。
update4: のみに依存している場合は、次のように.append()
パッチを適用できます。jQuery.fn.append()
jQuery.fn.append=function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 || this.nodeType === 11 ) {
this.appendChild( elem );
$(elem).trigger('appended');
}
});
};
$('button').click(function() {
$('#appendme').append($('<div class="inner">').text(Math.random()));
})
$('#appendme').on('appended','.inner',function() {
console.log(this);
});
デモ2
ここjQuery.fn.domManip
のように偽装する方が正しいかもしれません