javascript cloneNode с событиями - PullRequest
1 голос
/ 03 мая 2009

Я работаю над сценарием greasemonkey для gmail, где мне нужно сделать копию ссылки «Входящие». Использование cloneNode работает нормально, но я думаю, что есть событие onclick, которое прикрепляется к нему во время выполнения. Итак, это вопрос из двух частей: 1. Есть ли способ увидеть, какие события привязаны к узлу? 2. Есть ли способ скопировать эти события? Самая близкая вещь, которую я нашел, была jQuery, и я еще не готов пойти туда. Спасибо!

Ответы [ 3 ]

5 голосов
/ 03 мая 2009
  1. Нет, если он не установлен с помощью атрибута onclick элемента.
  2. Не надежно (вы можете скопировать атрибут onclick, но будет ли он продолжать работать, зависит от того, использовался ли он и чем он занимается).

Вам лучше добавить свой собственный обработчик click, а затем вызвать это событие на оригинале ... Или имитировать поведение другим способом.

0 голосов
/ 10 августа 2013

Вот пример использования 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>
0 голосов
/ 10 августа 2013

Я думаю, что мы можем решить эту проблему, используя эту теорию:

У нас есть NodeList в JS, также называемый liveLists. Мы можем проверять всякий раз, когда изменяется их длина, добавляя нужные общие события в новый элемент списка по адресу (length-1).

Что сказать ....

...