Тебе надо пробежать по документу и выбрать все текстовые ноды, таким образом ты не затронешь другие элементы и их поведение. Заменяя все ты создаешь новый документ и для него надо заново все инициализировать. Чтоб избежать всего этого надо работать с текстовыми нодами.
function replaceText(text, textToReplace) {
function replace(nodes) {
nodes.forEach(node => {
if (node instanceof HTMLScriptElement) {
return;
}
if (node instanceof HTMLStyleElement) {
return;
}
if (node instanceof Text) {
if (node.nodeValue.match(text)) {
node.nodeValue = node.nodeValue.replace(text, textToReplace)
}
}
else {
replace(Array.from(node.childNodes));
}
});
}
replace(Array.from(document.body.childNodes));
}
replaceText("{DATETIME}", "___WwW___");