javascript cloneNode avec des événements
-
03-07-2019 - |
Question
Je travaille sur un script greasemonkey pour Gmail dans lequel je dois copier le fichier "Boîte de réception". lien. L'utilisation de cloneNode fonctionne bien, mais je pense qu'un événement onclick y est associé au moment de l'exécution. Donc, ceci est une question en deux parties: 1. Y a-t-il un moyen de voir quels événements sont attachés à un nœud? 2. Existe-t-il un moyen de copier ces événements? La chose la plus proche que j'ai trouvée était jQuery, et je ne suis pas encore prête à y aller. Merci!
La solution
- Non, sauf s'il est défini à l'aide de l'attribut
onclick
de l'élément. - Pas fiable (vous pouvez copier l'attribut
onclick
, mais si cela continuera à fonctionner dépend de son utilisation et de ses fonctions).
Vous feriez mieux d'ajouter votre propre clic
, puis de déclencher cet événement sur l'original ... ou de simuler le comportement d'une autre manière.
Autres conseils
Je pense que nous pouvons résoudre ce problème en utilisant cette théorie:
Nous avons NodeList dans JS, également appelé liveLists. Nous pouvons vérifier chaque fois que leur longueur change, ajoutez les événements communs souhaités au nouvel élément dans la liste (longueur-1).
Que dire ....
Voici l'exemple utilisant Nodelist pour ajouter des événements.
<body>
<div id="one" class="clones" style="background:red;width:100px;height:100px"></div>
</body>
<script>
//Selecor based live list [Advantage]
var nodeList = document.getElementsByClassName('clones')
//Common Function for nodelist
nodeList.addEvents = function(){
nodeList.item(nodeList.length-1).addEventListener('click',function(){
console.log(this.id);
});
}
nodeList.addEvents();
//Making Clone
var _clone = document.getElementsByTagName('div')[0].cloneNode(true);
//Changing Id
_clone.id="two"
document.body.appendChild(_clone);
nodeList.addEvents();
</script>