javascript cloneNode с событиями
-
03-07-2019 - |
Вопрос
Я работаю над сценарием greasemonkey для gmail, где мне нужно сделать копию " Входящие " ссылка на сайт. Использование cloneNode работает нормально, но я думаю, что есть событие onclick, которое прикрепляется к нему во время выполнения. Итак, это вопрос из двух частей: 1. Есть ли способ увидеть, какие события привязаны к узлу? 2. Есть ли способ скопировать эти события? Самая близкая вещь, которую я нашел, была jQuery, и я еще не готов пойти туда. Спасибо!
Решение
onclick
для элемента. onclick
, но будет ли он продолжать работать, зависит от того, использовался ли он и чем он занимается). Вам лучше добавить свой собственный обработчик click
, а затем вызвать это событие на оригинале ... Или имитировать поведение другим способом.
Другие советы
Я думаю, что мы можем решить эту проблему, используя эту теорию:
У нас есть NodeList в JS, также называемый liveLists. Мы можем проверять всякий раз, когда изменяется их длина, добавляя нужные общие события в новый элемент списка в (length-1).
Что сказать ....
Вот пример использования Nodelist для добавления событий. Р>
<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>