6

これは何らかの方法で処理できることはわかっていますが、今のところ、これは本当に苦労しています。スクリプトを作成していて、DOM 操作が完了したときに特定の関数を起動したいと考えています。他のスクリプトを変更/追加/削除することはできません (何らかのフレームワークを使用してページに挿入される可能性があるため)。ページは ajax リクエスト (jQuery には実装されていません) を使用してコンテンツをロード/変更しています。ここで、すべての DOM の変更が完了したときにイベントをトリガーしたいと考えています。私の現在のアプローチは、すべての DOMSubtreeModified イベントで関数を起動することです。このようなもの

$(document).bind('DOMSubtreeModified', doSomeStuff);

しかし、このアプローチの欠点は、ajax が 1 回の呼び出しで 10 個の要素をロードすると、要素ごとに doSomeStuff が起動されることです。これは、10 番目の要素がロードされた後の発火のみに制限できますか? $(document).ready() イベントをリセットするようなものですか? $(document).ready() は、DOM の準備が整うたびに発生します (ajax コンテンツのロード後)。

4

3 に答える 3

2

Mutation Observer を使用すると、変更をリッスンでき、イベントが発生した場合にドキュメントが変更されます。

MutationObserver = window.MutationObserver || window.WebKitMutationObserver;

var observer = new MutationObserver(function(mutations, observer) {
    // Add the actions to be done here if a changes on DOM happened 
    console.log(mutations, observer);

});

// Register the element root you want to look for changes
observer.observe(document, {
  subtree: true,
  attributes: true
});
于 2013-10-26T11:56:11.570 に答える
0

私はパーティーに少し遅れていることを知っていますが、あなたの機能をデバウンスしたいかもしれませんdoSomeStuff. Underscore.js への依存関係を導入することに反対しない場合は、優れたデバウンス機能があります。

于 2014-03-05T18:09:30.917 に答える