2011-12-19 14 views
7

要素がドキュメントに追加されたときにイベントを発生させたいと思います。私はJQuery documentation for on()list of eventsを読んだが、イベントのどれも要素作成に関係していないようだ。Chrome拡張機能:要素が作成されたときにイベントを発生させますか?

私は要素が文書に追加されたときに私がコントロールしていないよう DOMを監視する必要があります(私のJavascriptがクローム拡張コンテンツスクリプトのように)

答えて

4

これは古い質問ですが、既に回答がありますが、状況が変わったので、私はこのページに上陸して答えを求める人々に最新の回答を追加すると思いました。

DOM Mutation Eventsは廃止されました。 MDN(DOM Mutation Eventsに関する)によると:

非推奨
この機能は、Webから削除されました。いくつかのブラウザはまだそれをサポートしているかもしれませんが、それは落とされつつあります。古いプロジェクトや新しいプロジェクトでは使用しないでください。それを使用しているページやWebアプリケーションは、いつでも破損する可能性があります。

一つもより効率的である新しいMutationObserver APIを、使用する必要があります。
mutation-summaryライブラリは現在、この新しいAPIに便利なintefaceを提供。)

使用例:

/* Create an observer instance */ 
var observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
     console.log(mutation.type); 
    }); 
}); 

/* Config info for the observer */ 
var config = { 
    "childList": true, 
    "subtree": true 
}; 

/* Observe the body and its (descendants) for "childList" changes */ 
observer.observe(document.body, config); 

/* Stop the observer, when it is not required any more */ 
observer.disconnect(); 
+0

いいえいいです!私はStackOverflowがWeb技術者と時代遅れになることは嫌いです。私はこれを受け入れられた答えとしてマークしました。 – mikemaccana

1

最も簡単なオプションについては、あなたはLiveQueryを調べることをお勧めします効果的にあなたが後にしている 'DOMリスナー'です。ただし、パフォーマンス重視の可能性があるため、注意して使用する必要があります。

.on()を使用して自分自身をロールしたい場合は、となります。ただし、追加された要素はセレクタと一致する必要があります。たとえば、イベントをすべてのクラスの.myClassまで配線し、同じクラスの新しい要素をDOMに注入すると、イベントは発生します。効果的に、.on()APIは、jQueryの以前のバージョンのバインド/ライブ/デリゲートをロールアップします。後者の2つは、現在および将来のDOM要素に対して機能します。

+0

おかげ@SpaceBisonを。 on()を使用して自分自身のローリングは何を伴いますか?livequeryを使用するのはうれしいですが、可能であればプラグインを避けたいと思っています。 – mikemaccana

+1

アイテムが追加されたときに*トリガされる*カスタムイベント*が必要な場合は、Luiz Fernandoの答えに従ってください。*ビルトインイベント*を使用したいだけですが、既に存在し、作成される要素と一致するセレクタが必要であり、* on()*を使用してそれらを結ぶ必要があります。 - 新しい要素が、追加された要素とプレ存在する。 – SpaceBison

0

@ SpaceBisonの回答の補足として、これらの要素を作成するときに独自のイベントを作成することができます。たとえば、次のように

function create_element() { 
    // Create an element 
    $('body').append("<p>Testing..</p>") 
    // Trigger 
    $('body').trigger('elementCreated'); 
} 
function monitor_elements() { 
    $("body").on("elementCreated", function(event){ 
    alert('One more'); 
    }); 
} 

$(document).ready(function(){ 

    monitor_elements(); 

    for (var i=0; i < 3; i++) { 
     create_element(); 
    } 

}); 

ライブ例:http://jsfiddle.net/9NsAh/

しかし、あなたはあなた自身の要素を作成するときに、もちろん、それだけで便利です。

2

私は自分の要素を作成していないので、要素を作成するときにイベントを発生させることはオプションではありません。

Mutation Summaryがフレンドリーなインターフェースを提供する APIの突然変異観測員APIです。

+0

これはChromeの拡張機能にとって非常に便利です。どうもありがとう! –

+1

いくつかのクイックコードを手に入れたい人向け:http://stackoverflow.com/questions/19150450/why-dont-mutationobserver-codes-run-on-chrome-30 **作業コードの質問と回答の組み合わせ。** –

関連する問題