Détecter des modifications d'un élément HTML avec JavaScript
Concept et utilisation
La fonction ElObserve() permet de détecter les modifications d'un élément HTML.
Constructeur
ElObserve()Retourne un objet détecteur de modifications d'un élément HTML.
- Syntaxe
new ElObserve(element, modifications);- Paramètres
element(Node)Le paramètre
elementde la fonctionElObserve()définit l'élément HTML pour lequel observer des modifications.modifications(Object)Le paramètre
modificationsde la fonctionElObserve()définit les modifications à observer pour un élément HTML.
Si ce paramètre est omis, tous les types de modifications disponibles seront détectables.- Propriétés
childList(Boolean)La propriété
childListdu paramètremodificationsdéfinit avec une valeur booléenne la détection de toute modification d'un élément enfant de l'élément modifié.subtree(Boolean)La propriété
subtreedu paramètremodificationsdéfinit avec une valeur booléenne la détection de toute modification d'un élément descendant de l'élément modifié.attributes(Boolean)La propriété
attributesdu paramètremodificationsdéfinit avec une valeur booléenne la détection de toute modification d'un attribut de l'élément modifié.attributeOldValue(Boolean)La propriété
attributeOldValuedu paramètremodificationsdéfinit avec une valeur booléenne si la détection de toute modification d'un attribut de l'élément modifié doit renvoyer la valeur précédente de l'attribut.characterData(Boolean)La propriété
characterDatadu paramètremodificationsdéfinit avec une valeur booléenne la détection de toute modification du contenu textuel de l'élément modifié.characterDataOldValue(Boolean)La propriété
characterDataOldValuedu paramètremodificationsdéfinit avec une valeur booléenne si la détection de toute modification de contenu textuel de l'élément modifié doit renvoyer le contenu précédent de l'élément.
- Méthodes de l'instance
detecteur.addListener()La méthode
addListener()de l'interfaceElObserve()ajoute un écouteur au détecteur de modifications d'élément HTML.- Syntaxe
detecteur.addListener(ecouteur);- Paramètre
ecouteur(Function)Le paramètre
ecouteurde la méthodeaddListener()définit un écouteur de modifications d'élément HTML qui sera ajouté au détecteur.
Il s'agit d'une fonction de rappel, dont l'argument renvoie une liste des mutations qu'un élément a subi.
detecteur.removeListener()La méthode
removeListener()de l'interfaceElObserve()supprime un écouteur du détecteur de modifications d'élément HTML.- Syntaxe
detecteur.removeListener(ecouteur);- Paramètre
ecouteur(Function)Le paramètre
ecouteurde la méthoderemoveListener()définit un écouteur de modifications d'élément HTML qui sera supprimé du détecteur.
detecteur.connect()La méthode
connect()de la fonctionElObserve()active le détecteur de modifications d'un élément HTML.- Syntaxe
detecteur.connect();- Paramètre
Aucun.
detecteur.disconnect()La méthode
disconnect()de la fonctionElObserve()désactive le détecteur de modifications d'un élément HTML.
La pile d'écouteurs reste conservée.- Syntaxe
detecteur.disconnect();- Paramètre
Aucun.
Exemple de détection de modification du document
var element = document.documentElement;
var modifications = {
attributes: true
};
var detecteur = new ElObserve(element, modifications);
var ecouteur = function(mutations) {
console.log(mutations);
detecteur.disconnect();
};
detecteur.addListener(ecouteur);
detecteur.connect();
element.setAttribute('test', 1);
element.setAttribute('test', 2);
// renvoie : [
// {
// addedNodes: NodeList []
// attributeName: "test"
// oldValue: null
// removedNodes: NodeList []
// target: html
// type: "attributes"
// }, {
// addedNodes: NodeList []
// attributeName: "test"
// oldValue: "1"
// removedNodes: NodeList []
// target: html
// type: "attributes"
// }
// ]
//
// La fonction étant asynchrone, les 2 modifications peuvent être listées dans un même retour.Code source de la fonction
function ElObserve(e,o){
o=o||{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0,
characterData:!0,characterDataOldValue:!0};var t=this,a=[],m=null;
t.connect=function(){if(m===null){m=new MutationObserver(function(x){
for(var i=0,j=a.length;i<j;i++){a[i](x);}});m.observe(e,o);}};
t.disconnect=function(){if(m){m.disconnect();m=null;}};
t.addListener=function(f){a.push(f);};t.removeListener=function(){
var i=a.indexOf(f);if(i>-1){a.slice(i,1);}};}Dernière mise à jour le .
