0

我的问题与 HTML 文档正文之后包含的以下 Javascript 相关:

   <script language="javascript">
    function walkText(node) {
      if (node.nodeType == 3) {
        node.data = node.data.replace(/Blah Blah Blah/gi, "<span style=\"font-family: elektora;\">a<span style=\"font-size: 80%\">shen</span> g<span style=\"font-size: 80%\">low</span> g<span style=\"font-size: 80%\">aming</span></span>");
      }
      if (node.nodeType == 1 && node.nodeName != "SCRIPT") {
        for (var i = 0; i < node.childNodes.length; i++) {
          walkText(node.childNodes[i]);
        }
      }
    }
    walkText(document.body);
   </script>

请注意,替换文本包含内部和外部 HTML 内容的混合,并且不会在浏览器中相应地呈现。它<span style=\"font-family: elektora;\">a<span style=\"font-size: 80%\">shen</span> g<span style=\"font-size: 80%\">low</span> g<span style=\"font-size: 80%\">aming</span></span>在浏览器中作为原始未处理的 HTML 输出。

如何修改查找和替换代码以在浏览器中以这种方式替换,以便将其视为混合的内部和外部 HTML 内容。目前它将原始文本字符串替换为另一个文本字符串,其 HTML 标记未在浏览器中呈现。

4

1 回答 1

1

您的问题的原因是您正在替换文本节点。所以字符串没有呈现。尝试以下代码块

function walkText(node) {
let replacedText = "<span style='font-family: elektora;'>a<span style='font-size: 80%'>shen</span> g<span style='font-size: 80%'>low</span> g<span style='font-size: 80%'>aming</span></span>";
let pattern = /hhh/gi;

  if (node.nodeType == 1 && node.nodeName != "SCRIPT") {

  let indx = node.innerHTML.search(pattern, replacedText);      
  if (indx != -1)
  {
      node.innerHTML = node.innerHTML.replace(pattern, replacedText);
  }
  else
  {      
    for (var i = 0; i < node.childNodes.length; i++) {
      walkText(node.childNodes[i]);
    }
   }
  }      
}
walkText(document.body);
于 2018-01-23T14:49:58.177 回答