2010-09-19 5 views

Répondre

6

Si vous devez détecter des modifications, vous pouvez vérifier les événements de mutation DOM. Le DOM events wikipedia page les répertorie tous. Cependant, vous devez savoir qu'ils ne sont pas pris en charge dans Internet Explorer et peuvent se déclencher trop souvent dans les navigateurs qui les prennent en charge. Une approche par force brute consiste à utiliser setTimeout et à vérifier les modifications par vous-même. Mon expérience montre cependant que le besoin de notifications de changement DOM peut être évité. Pourriez-vous donner plus de détails sur vos besoins exacts?

+0

Je veux permettre à l'utilisateur de changer la couleur de n'importe quel élément de la page en cliquant sur l'élément. Lorsque le point de clic est connu, je veux analyser le DOM pour tous les éléments qui se trouvent au point de clic, et laisser l'utilisateur décider de l'élément dont il veut changer la couleur. Depuis les éléments peuvent être ajoutés et supprimés sur cette page, il semble que je dois analyser le DOM à chaque clic. Je pensais mettre en cache tous les éléments DOM dans une variable et changer cette variable quand le DOM change. –

+0

@MishaMoroshko AFAIK vous pouvez utiliser event.target pour savoir quel noeud a été cliqué. Vous pouvez donc attacher l'événement à 'documentElement' lui-même. –

4

Vous pouvez vous connecter à de nombreux événements DOM en fonction du type de modification que vous souhaitez écouter. Voici une page avec tous les événements de modification DOM:

https://developer.mozilla.org/en/DOM_Events

Le générique, catch-all événement change DOM est DOMSubtreeModified. Par exemple:

document.getElementById('abc').addEventListener('DOMSubtreeModified', f, false); 
2

Il n'existe aucun événement intégré pour cela qui est malheureusement largement pris en charge. Vous pouvez cependant utiliser un plugin jQuery appelé livequery.

+0

Ils sont géniaux mais ne sont pas correctement supportés. Je préfère éviter le problème et utiliser un plugin testé. –

+0

L'utilisation de bibliothèques limite la demande pour le développement de normes ainsi que le ralentissement du flux d'utilisateurs, par ex. Internet Explorer. –

+4

@Delan Hypothèses très erronées: les librairies Javascript font abstraction des différences dans l'implémentation du DOM dans le navigateur et aident à créer une base de référence sur laquelle il est possible de développer, au lieu de passer du temps à corriger les problèmes de compatibilité. Rompre votre site sur IE n'empêchera pas les gens de s'éloigner d'Internet Explorer, seulement les personnes qui visitent votre site, et ne va pas aider qui que ce soit. –

Questions connexes