2

jsフィドル

上記のスクリプトは正しく動作しません。DOMNodeInserted(Line19) を MutationObserver(line21) に置き換えたかったのですが、MutationObserver を使ったらうまくいきません。

// Line 19 (works well)
document.body.addEventListener('DOMNodeInserted', function (event) {linkifyContainer(event.target);}, false);

// Line 21 (does not work)
var observer=new window.MutationObserver(function(mutations){mutations.forEach(function(mutation){linkifyContainer(mutation.addedNodes)})});observer.observe(document.body,{childList:true,subtree:true});

21行目に何か問題があるはずですが、何が問題なのか、どうすればよいのかわかりません。
これをchrome28とfirefox23で確認しました。
これは chrome の拡張機能なので、「WebKitMutationObserver」や「MozMutationObserver」を使用する必要はありません。

解決策を教えてください。

4

1 に答える 1

1

ミューテーション オブザーバー コードは正常に動作します。引数 (つまり、linkifyContainer)を渡そうとしていますが、単一の要素が渡されることを期待しています。NodeListmutation.addedNodeslinkifyContainer

呼び出しを比較します。

linkifyContainer(event.target)

linkifyContainer(mutation.addedNodes)

2 番目のケースは、複数のプロパティ名addedNodesNodeListで示されるように、単一の DOM ノードではなくです。

mutation.addedNodes[0]、またはループオーバーを使用するだけmutation.addedNodesです:

for(var i=0; i<mutation.addedNodes; ++i) {
    linkifyContainer(mutation.addedNodes[i]);
}
于 2013-08-28T15:22:26.947 に答える