您的位置:首页 > 文旅 > 美景 > 解决替换富文本中内容,当替换字母类似于p之类,导致富文本中的标签被替换页面混乱问题

解决替换富文本中内容,当替换字母类似于p之类,导致富文本中的标签被替换页面混乱问题

2024/10/6 2:22:32 来源:https://blog.csdn.net/m0_53001289/article/details/140927773  浏览:    关键词:解决替换富文本中内容,当替换字母类似于p之类,导致富文本中的标签被替换页面混乱问题

一、问题原因
做了一个富文本的功能,需求要支持替换富文本中的内容,类似与word的查找替换,当做到替换的时候,发现获取到富文本的内容是带有标签的内容,替换与标签一样的英文的时候会导致标签被替换,导致页面混乱。(例:当替换字母类似于p,富文本中有< p ></ p >标签中的p也会被替换)

二、解决方法

/*** html:富文本内容* oldText:要被替换的内容* newText: 将替换为的内容* disSize:是否区分大小写
*/
const replaceText = (html, oldText, newText,disSize) => {  // 使用DOMParser将HTML字符串解析为DOM文档  const parser = new DOMParser();  const doc = parser.parseFromString(html, 'text/html');  // 创建一个DocumentFragment去存储修改后的DOM节点  const fragment = doc.createDocumentFragment();  // 递归函数,用于遍历所有节点并替换相关文本  function traverseAndReplace(node) {  if (node.nodeType === Node.TEXT_NODE) {  // 文本节点,检查并替换文本  const replacedText = disSize? node.nodeValue.replace(new RegExp(oldText, 'gi'), newText): node.nodeValue.replace(new RegExp(oldText, 'g'), newText);  if (replacedText !== node.nodeValue) {  // 如果文本被替换,则替换整个节点(因为nodeValue为只读的)  const newNode = doc.createTextNode(replacedText);  node.parentNode.replaceChild(newNode, node);  }  } else if (node.nodeType === Node.ELEMENT_NODE) {  // 元素节点,递归遍历所以子节点  node.childNodes.forEach(child => traverseAndReplace(child));  }   }  // 遍历并替换文档中的文本  traverseAndReplace(doc.body);  fragment.appendChild(doc.body); return documentFragmentToHTMLString(fragment).replace(/<body>/g, "").replace(/<\/body>/g, ""); // 返回修改后的HTML字符串  
}

三、查找替换插件仓库
https://gitee.com/a224747_cheng/find-replacement-function/tree/master
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com