JavaScript Clonenode mit Ereignissen
-
03-07-2019 - |
Frage
Ich arbeite an einem Greasemonkey -Skript für Google Mail, in dem ich eine Kopie des "Posteingangs" -Links erstellen muss. Die Verwendung von Clonenode funktioniert in Ordnung, aber ich denke, es gibt ein Onclick -Ereignis, das zur Laufzeit damit verbunden ist. Dies ist also eine zweiteilige Frage: 1. Gibt es eine Möglichkeit zu sehen, welche Ereignisse mit einem Knoten verbunden sind? 2. Gibt es auch eine Möglichkeit, diese Ereignisse zu kopieren? Das, was ich am nächsten fand, war JQuery, und ich bin noch nicht bereit, dorthin zu gehen. Vielen Dank!
Lösung
- Nicht, es sei denn, es wird mit dem festgelegt
onclick
Attribut auf das Element. - Nicht zuverlässig (Sie können die kopieren
onclick
Attribut, aber ob dies weiter funktionieren wird, hängt davon ab, ob es verwendet wurde und was es tut).
Sie sind besser dran, Ihre eigenen hinzuzufügen click
Handler, und dann dieses Ereignis auf dem Original auszulösen ... oder das Verhalten auf andere Weise zu simulieren.
Andere Tipps
Ich denke, wir können dieses Zeug mit dieser Theorie lösen:
Wir haben Nodelist in JS, auch Leberlisten genannt. Wir können überprüfen, wenn sich ihre Länge ändert, und addEvent die gewünschten gemeinsamen Ereignisse mit dem neuen Element in der Liste (Länge 1).
Was sagt ....
Hier ist das Beispiel, das Nodelist zum Hinzufügen von Ereignissen verwendet.
<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>