Manipulating innerHTML removes the event handler of a child element?
Yes, when you do:
document.body.innerHTML += '<br>';
You're really doing:
document.body.innerHTML = (document.body.innerHTML + '<br>');
So you're completely destroying and recreating all the content.
Modifying innerHTML
causes the content to be re-parsed and DOM nodes to be recreated, losing the handlers you have attached. Appending elements as in the first example doesn't cause that behavior, so no re-parsing has to occur, since you are modify the DOM tree explicitly.
Another good way to handle this is to use insertAdjacentHTML(). For example:
document.body.insertAdjacentHTML('beforeend', '<br>')