替换html中的所有单词而不影响标签

时间:2019-12-25 17:20:45

标签: javascript html dom

我正在寻找一种在给定网站中将Foo的所有实例替换为<a>Bar</a>(有效链接)的方法。理想情况下,不需要任何像jquery这样的额外库。

我尝试过的事情:

  • document.body.innerHtml和类似的内容(document.getElementByTagName('p))不能与简单的.replace(/Foo/g, '<a>Bar</a>')一起使用,因为它可能最终会替换Foo类名或id,因此会中断这页纸。也可能会影响体内的某些js脚本。
  • 仅编辑textNode(具有类似this之类的方法是行不通的,因为它将a标签显示为文本,而不是创建DOM元素。
  • 尝试解决textNodes问题并转到父元素并在其中应用.replace只会产生与第一个项目符号相同的问题。

我一直在寻找其他类似问题的答案,但没有找到能解决这三点的方法。

1 个答案:

答案 0 :(得分:2)

您已经关闭,但是需要用三个新节点的 set 替换整个文本节点:

  1. 一个文本节点,其中包含“字符串之前的所有内容”,
  2. 所需标签的HTML节点(除非它是实际链接,否则请勿使用<a>),然后
  3. 另一个包含所有剩余文本的textnode。

然后,当然,剩下的textnode现在是尚未处理的文本节点集的一部分。

(除非您为自己的任期做一个split,然后根据需要交织尽可能多的附加节点。然后您只需要一个接一个地遍历textnode,而不必将“其余”放回堆栈中)