javascript - 用 anchor 标记替换 DOM 文本

标签 javascript replace

我正在搜索 html 正文,但标签以纯文本形式显示。如何更正此问题,以将 John 替换为名称和链接以显示可点击的 anchor 。 javascript中可以解决搜索词的替换吗?这是不正确的。

我进行搜索和替换:

htmlreplace(/(John)/gi,"<a href=\"index.html\">$1</a>");

function htmlreplace(a, b, element) {
  if (!element) element = document.body;
  var nodes = element.childNodes;
  for (var n = 0; n < nodes.length; n++) {
    if (nodes[n].nodeType == Node.TEXT_NODE) {
      var r = new RegExp(a, 'gi');
      nodes[n].textContent = nodes[n].textContent.replace(r, b);
    } else {
      htmlreplace(a, b, nodes[n]);
    }
  }
}

最佳答案

这与您所要求的很接近。需要一些重构,但希望这对您来说是一个好的开始。


htmlreplace( /(John)/gi, "index.html" );

function htmlreplace( regex, link, element ) {
  if ( !element ) { element = document.body; }
  let nodes = element.childNodes;
  nodes.forEach((node)=>{
    if (node.nodeType == Node.TEXT_NODE) {
      let nodeTextContent = node.textContent;
      let match = regex.exec( nodeTextContent );  
      if ( match && node.parentNode.tagName !== "SCRIPT" ){
        let parentNode = node.parentNode;
        let parentHTML = parentNode.innerHTML;
        let a = document.createElement('a');
        a.href = link;
        a.textContent = match[1];
        console.log( 
          match[1],
          parentNode.tagName,
          parentNode.innerHTML,

        );
        parentNode.insertBefore( a, node );
        parentNode.removeChild( node );
        // let addedLink = nodeTextContent.replace( regex, `<a href="${link}">${match[1]}</a>` );
        parentNode.innerHTML = parentHTML.replace( regex, `<a href="${link}">${match[1]}</a>` );
        // parentNode.innerHTML = addedLink;
        // parentNode.innerHTML = nodeTextContent.replace(regex,"") + parentNode.innerHTML;
       }
    } else {
      htmlreplace( regex, link, node );
    }

  })

}

这是一个代码笔:https://codepen.io/kostasx/pen/VwwLKWz?editors=0010

[更新]更新代码以通过以下测试:

<!-- Test Case #1 [ PASS ] -->
<p>Hello
  <span>John</span>
</p>
<!-- Test Case #2 [ PASS ] -->
<h1>Hello John</h1>
<!--   Test Case #3 [ PASS ]-->
<span>
  <i>Hello</i> John
</span>
<br>
<!--   Test Case #4 [ PASS ]-->
<span>John hi</span>
<br>
<!--   Test Case #5 [ PASS ]-->
<span>John hi John</span>

关于javascript - 用 anchor 标记替换 DOM 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295427/

相关文章:

javascript - 如何与httprequest同步执行Javascript

javascript - RoR - 如何让 remote_form_for 在现有代码旁边插入新代码而不是替换它?

javascript - Polymer:如何为具有嵌套属性的纸张选项卡设置默认值

xslt - 具有 XPath 的唯一 ID 和多个类

javascript - 如何使用 JavaScript 字符串替换方法替换 '+' 符号?

Java 替换字符串匹配部分中的字符

javascript - IE8 中的 ActiveXObject

javascript - 行未正确跟随 x 操作系统且未显示第一个刻度

csv - 如何使用 sed 用等号替换单词 EQUALS

regex - 与正则表达式逻辑作斗争 : how do I remove a param from a url query string?