我需要将所有“®”实例替换为“< sup>®< sup>”在网站的正文。但是如果我使用replace函数,所有附加的Eventhandler都会被取消挂钩。我怎么能避免这种情况?
document.body.innerHTML = document.body.innerHTML.replace(/\u00AE/, '<sup>®</sup>')
答案 0 :(得分:1)
我怀疑您更换整个文档innerHTML以更改®的每个实例。这将导致文档中包含的所有HTML元素的破坏以及一组全新的HTML元素的创建。这就是你的事件处理程序 unhooked 的原因。
要在不丢失事件处理程序的情况下执行此操作,您必须迭代每个元素(或至少每个可能包含®的元素),并且只有在包含®的情况下才替换它的innerHTML。但是如果这个星座不幸的话,即使这样也会杀死你的一些事件处理程序。
另一种解决方案可能是使用另一种字体®。使用webfonts,可以加载仅包含特定字符的字体。这样你就可以用已经显示上标的字体替换用于®的字体。