在javascript中使用.replace()函数时,避免取消使用Eventhandler

时间:2015-02-13 10:34:15

标签: javascript jquery html

我需要将所有“®”实例替换为“< sup>®< sup>”在网站的正文。但是如果我使用replace函数,所有附加的Eventhandler都会被取消挂钩。我怎么能避免这种情况?

jsFiddle

document.body.innerHTML = document.body.innerHTML.replace(/\u00AE/, '<sup>&reg;</sup>')

1 个答案:

答案 0 :(得分:1)

我怀疑您更换整个文档innerHTML以更改®的每个实例。这将导致文档中包含的所有HTML元素的破坏以及一组全新的HTML元素的创建。这就是你的事件处理程序 unhooked 的原因。

要在不丢失事件处理程序的情况下执行此操作,您必须迭代每个元素(或至少每个可能包含®的元素),并且只有在包含®的情况下才替换它的innerHTML。但是如果这个星座不幸的话,即使这样也会杀死你的一些事件处理程序。

另一种解决方案可能是使用另一种字体®。使用webfonts,可以加载仅包含特定字符的字体。这样你就可以用已经显示上标的字体替换用于®的字体。