Pouvez-vous avoir un javascript crochet de déclenchement après un élément du DOM du style de l'objet de modifications?
D'un élément javascript style
objet qui contient les noms et les valeurs des styles css. J'aimerais déclencher une fonction à chaque fois que cet objet changements sans utilisation de bureaux de vote. Est-il possible de le faire d'une manière qui est compatible avec tous les navigateurs et ne fonctionne de manière fiable avec un code tiers (parce que disons que vous êtes fournissant un script)? La liaison d'un événement javascript comme DOMAttrModified
ou DOMSubtreeModified
ne suffira pas, car ils ne travaillent pas dans Chrome.
- stackoverflow.com/questions/4561845/...
- J'ai une réponse, mais, êtes-vous en ciblant les anciens navigateurs? ou tout simplement les principaux navigateurs?
- Je suis ciblant les anciennes versions de navigateurs, mais je serais certainement intéressé par une solution qui ne vise que les versions plus récentes
- Mais non, je ne se soucient pas de vieux navigateurs qui ne l'on utilise, comme Konqueror ou quoi...
- J'ai déjà répondu, utilisez
getter
etsetter
pour un maximum de performance - pourquoi ne pas vous utiliser l'événement de changement de Jquery. et si vous entraînement peu plus, vous trouverez un événement en direct de jquery qui assez bien fait ce que vous avez besoin. Ce qui concerne
Vous devez vous connecter pour publier un commentaire.
Edit 4: Démonstration En Direct
JS:
CSS:
HTML:
Edit 3: j'ai mis tout cela ensemble comme un plugin qui peut être téléchargé à partir de git attrchange et voici le page.
Edit 2:
Edit 1:
Grâce à @benvie pour ses commentaires.
DÉMO: http://jsfiddle.net/zFVyv/10/ (Testé dans FF 12, Chrome 19 et IE 7.)
Ref:
Prise En Charge Du Navigateur:
onpropertychange
- est pris en charge dans IE (testé sous IE 7)DOMAttrModified
- est pris en charge dans IE 9, FF et OperaMutationObservers
- est très nouveau et il a bien fonctionné dans Chrome 18. Pas certain dans quelle mesure il est pris en charge et encore être testée dans Safari.Grâce @benvie sur l'ajout d'infos sur WebkitMutationObserver
WebkitMutationObservers
? (Comment loin dans le chrome et safari-t-il?) Qu'en estonPropertyChange
?var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
.onpropertychange
travaille dans IE6?attachEvent
branche dansisDOMAttrModifiedSupported
: DOM mutation de la prise en charge des événements coïncide avecaddEventListener
soutien dans IE (les deux ont été introduites dans IE 9).EDIT2:
Si vous voulez toujours utiliser
mutation observer
, l'utilisation de cette bibliothèque: mutation-résuméEDIT:
Comme je l'ai dit dans ma réponse ci-dessous et grâce à Vega de son commentaire, en utilisant des choses comme
object.watch
oumutation observers
ne sont pas recommandés pour l'utilisation dans des applications importantes. ce qui est réel citation de MDN:Donc, si la compatibilité inter-navigateur est dans votre liste de contrôle, de Nouveau, je vous suggère fortement de primordial
setter
s etgetter
s destyle
objet.utilisation
de l'objet.montre
et avoir à l'esprit pour un cross-browser solution:Vous pouvez remplacer
getter
etsetter
méthodes de l'élémentstyle
objet trop.Il y a un plugin jQuery disponibles pour cela, jQuery regarder
setInterval
s, n'est-ce pas?J'ai trouvé ce petit plugin qui fait exactement cela et il peut être modifié pour ajouter de la mutation que vous souhaitez... Même scrollHeight changement écouteur.
Le plugin: http://www.jqui.net/jquery-projects/jquery-mutate-official/
voici la démo:
http://www.jqui.net/demo/mutate/
setTimeout(reset, mutate.speed);
ligne (vous devrez peut-être de l'onu-minify pour le rendre lisible).Même pour tous les plus modernes browers il n'y a pas de croix-navigateur de façon à atteindre cet objectif. Vous devez acheminer tous vos changements de style css dans une fonction, ce qui pourrait provoquer des écouteurs d'événement. Ce serait la méthode la plus sûre.
Dans une réponse à une question similaire, il a été suggéré que si vous savez ce style d'établissement des interactions serait effectuée via une interface standard (c'est à dire toujours à l'aide de jQuery, etc.) il a été suggéré que les événements personnalisés être déclenché à chaque fois que la bibliothèque de la méthode est appelée.
Cela permettrait un plus large soutien de la matrice, mais laisserait tout changement de propriété ignorée si elle est effectuée sans l'aide de la méthode de bibliothèque. Il apparaît également qu'une telle approche n'est pas applicable à natif setters ils ne peuvent pas toujours être invoqué.
Vous pouvez utiliser attrchange plugin jQuery. La fonction principale du plugin est de se lier à une fonction d'écoute sur la modification de l'attribut d'éléments HTML.