Is it possible to append to innerHTML without destroying descendants' event listeners?

前端 未结 13 1165
悲哀的现实
悲哀的现实 2020-11-21 23:40

In the following example code, I attach an onclick event handler to the span containing the text \"foo\". The handler is an anonymous function that pops up an <

13条回答
  •  死守一世寂寞
    2020-11-22 00:18

    Unfortunately, assignment to innerHTML causes the destruction of all child elements, even if you're trying to append. If you want to preserve child nodes (and their event handlers), you'll need to use DOM functions:

    function start() {
        var myspan = document.getElementById("myspan");
        myspan.onclick = function() { alert ("hi"); };
    
        var mydiv = document.getElementById("mydiv");
        mydiv.appendChild(document.createTextNode("bar"));
    }
    

    Edit: Bob's solution, from the comments. Post your answer, Bob! Get credit for it. :-)

    function start() {
        var myspan = document.getElementById("myspan");
        myspan.onclick = function() { alert ("hi"); };
    
        var mydiv = document.getElementById("mydiv");
        var newcontent = document.createElement('div');
        newcontent.innerHTML = "bar";
    
        while (newcontent.firstChild) {
            mydiv.appendChild(newcontent.firstChild);
        }
    }
    

提交回复
热议问题