이벤트가있는 자바 스크립트 클로네 노드
-
03-07-2019 - |
문제
"받은 편지함"링크 사본을 만들어야하는 Gmail 용 Greasemonkey 스크립트를 작업 중입니다. Clonenode를 사용하면 괜찮지 만 런타임에 연결되는 Onclick 이벤트가 있다고 생각합니다. 그래서 이것은 두 가지 부분 질문입니다. 1. 노드에 어떤 이벤트가 첨부되어 있는지 확인할 수있는 방법이 있습니까? 2. 이러한 이벤트를 복사 할 수있는 방법이 있습니까? 내가 찾은 가장 가까운 것은 jQuery 였고, 나는 아직 거기에 갈 준비가되지 않았습니다. 감사!
해결책
- 사용을 설정하지 않는 한 아닙니다
onclick
요소의 속성. - 확실하게는 아닙니다 (복사 할 수 있습니다
onclick
속성이지만 계속 작동하는지 여부는 사용되었는지 여부와 그 일에 따라 다릅니다).
당신은 당신 자신을 추가하는 것이 좋습니다 click
핸들러, 원본에서 해당 이벤트를 트리거하거나 다른 방식으로 동작을 시뮬레이션합니다.
다른 팁
이 이론을 사용 하여이 내용을 해결할 수 있다고 생각합니다.
우리는 JS에도 Livelists라고도하는 Nodelist를 가지고 있습니다. 길이가 변경 될 때마다 확인할 수 있으며 원하는 일반적인 이벤트를 (길이 -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>
제휴하지 않습니다 StackOverflow