在javascript中使用.replacement()函数时,请避免取消挂起事件处理程序

Avoid unhooking Eventhandlers when using .replace() function in javascript

本文关键字:取消 程序 事件处理 挂起 函数 javascript replacement      更新时间:2023-10-24

我需要将网站正文中"®"的所有实例替换为"<sup>®<sup>"。但是,如果我使用replace函数,那么所有附加的事件处理程序都会被取消挂起。我该如何避免这种情况?

jsFiddle

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

我怀疑您将整个文档替换为innerHTML以更改®的每个实例。这将导致文档中包含的所有HTML元素被销毁,并创建一组全新的HTML元素。这就是事件处理程序解除挂起的原因。

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

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