MutationObserver の概要
MutationObserver は、特定の範囲内の DOM ツリーが変更されたときに適切に対応できる機能を開発者に提供します。この API は、DOM3 イベント仕様で導入された Mutation イベントを置き換えるように設計されています。
Mutation Observer は、DOM の変更を監視するためのインターフェイスです。 DOM オブジェクト ツリーに変更が発生すると、Mutation Observer に通知されます。
Mutation Observer には次の機能があります:
•すべてのスクリプト タスクが完了するまで実行前に待機します。つまり、非同期で行います。
•DOM 変更を 1 つずつ処理するのではなく、DOM 変更レコードを処理用の配列にカプセル化します。
•DOM ノードで発生するすべての変更を監視でき、特定の種類の変更も監視できます
MDN 情報: MutationObserver
MutationObserver はコンストラクターであるため、作成時に new MutationObserver;
を渡す必要があります。MutationObserver をインスタンス化する場合、コールバック関数が必要です。コールバック関数は、指定された DOM ノード (ターゲット ノード) が変更されたときに呼び出されます。
呼び出されると、オブザーバー オブジェクトは 2 つのパラメーターとともに関数に渡されます。1: 最初のパラメータは、複数の MutationRecord オブジェクトを含む配列です。
2: 2 番目のパラメータはオブザーバー オブジェクト自体です。
例:
インスタンスオブザーバーには 3 つのメソッドがあります: 1: 監視 ; 2: 切断 ;
メソッドを観察しますObserve メソッド: 監視する必要があるターゲット ノードを現在のオブザーバー オブジェクトに登録し、ターゲット ノードで DOM が変更されたときに通知を受け取ります (同時にその子孫ノードを監視することもできます)。 このメソッドには 2 つのパラメーターが必要です。1 つ目はターゲット ノードで、2 つ目のパラメーターは変更を監視する必要があるタイプ (json オブジェクト) です。例は次のとおりです。
コードをコピーします
takeRecords
オブザーバー オブジェクトのレコード キューをクリアし、Mutation イベント オブジェクトを含む配列を返します。
MutationObserver は、指定したノード内で発生する変更が毎回記録されるため、エディターのやり直しと元に戻すの実装に最適です。従来のキーダウンまたはキーアップの実装を使用する場合、次のような欠点があります。
1: スクロールが失われ、スクロール位置が不正確になります。2: フォーカスを失った;
....MutationObserver を通じて実装された、元に戻すとやり直し (元に戻すとロールバックの管理) のための管理プラグイン MutationJS を作成するのに数時間かかりました。別のプラグインの紹介として: (
http://files.cnblogs.com/files/diligenceday/MutationJS.js):
コードをコピーしますMutationJS 如何使用
那這個MutationJS怎麼用呢?
ミューテーション インスタンス mu にはいくつかのメソッドがあります:
1: mu.undo() 操作のロールバック
2: mu.redo() ロールバックを元に戻す
3: mu.canUndo() が逆に操作できるかどうか、戻り値は true または false です。
4: mu.canRedo() がロールバックをキャンセルできるかどうか、戻り値は true または false です。
5: mu.reset() はすべての元に戻すリストをクリアし、スペースを解放します。
6: mu.without() は関数パラメータを渡しますが、関数内のすべての DOM 操作はによって記録されません。
MutationJS は、参照用に単純な undoManager を実装しています。これは、Firefox、Chrome、Google Chrome、および IE11 で完全に動作します。
MutationObserver元の一連のミューテーション イベントを削除すると、ブラウザは指定された要素の下にあるすべての要素の追加、削除、置換などを監視します;
IE でのデモのスクリーンショット:
MutatoinObserver のブラウザ互換性:
機能 | クロム | Firefox (Gecko) | Internet Explorer | オペラ | サファリ |
---|---|---|---|---|---|
基本サポート |
18
26 |
14(14) | 11 | 15 | 6.0WebKit |