Je voudrais utiliser un objet MutationObserver
pour observer les modifications de certains de mes nœuds DOM.
Les documents donnent un exemple de création d'un objet MutationObserver
et de son enregistrement sur une cible.
// select the target node
var target = document.querySelector('#some-id');
// create an observer instance
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type);
});
});
// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true };
// pass in the target node, as well as the observer options
observer.observe(target, config);
Disons que j'ai le code ci-dessus, mais juste en dessous, je place ce code:
var target2 = document.querySelector('#some-other-id');
var config2 = {attributes: true, subtree: true};
observer.observe(target2, config2);
observer
:
target
?target2
?L'observateur va maintenant regarder deux cibles - target
et target2
selon vos définitions. Aucune erreur ne sera levée et target
ne sera pas "non enregistré" en faveur de target2
. Aucun comportement inattendu ou autre ne sera exposé.
Voici un exemple qui utilise le même MutationObserver
sur deux éléments modifiables. Pour afficher cela, supprimez le <span>
nœud de chaque élément contenteditable
et affichez l'étendue du comportement sur les deux éléments observés.
<div id="myTextArea" contenteditable="true">
<span contenteditable="false">Span A</span>
</div>
<div id="myTextArea2" contenteditable="true">
<span contenteditable="false">Span B</span>
</div>
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
//console.log($(mutation.removedNodes)); // <<-- includes text nodes
$(mutation.removedNodes).each(function(value, index) {
if(this.nodeType === 1) {
console.log(this)
}
});
});
});
var config = { attributes: true, childList: true, characterData: true };
observer.observe($('#myTextArea')[0], config);
observer.observe($('#myTextArea2')[0], config);
JSFiddle Link - démo
Notez que j'ai recyclé la même configuration pour cette première démo, mais le placement d'une nouvelle configuration sera exclusif à cet élément observé. En prenant votre exemple tel que défini dans config2
, si utilisé sur #myTextArea2
, vous ne verrez pas le nœud enregistré selon les options de configuration, mais notez que l'observateur de #myTextArea
n'est pas affecté.
JSFiddle Link - démo - exclusivité de configuration