Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中替换几乎所有的HTML标记,而不使用字符串形式_Javascript_Html_String_Replace - Fatal编程技术网

Javascript 在JS中替换几乎所有的HTML标记,而不使用字符串形式

Javascript 在JS中替换几乎所有的HTML标记,而不使用字符串形式,javascript,html,string,replace,Javascript,Html,String,Replace,我需要替换字符串中几乎所有的HTML标记 标签的内容应予以保留 我只想保留几个标签: p 李 保险商实验室 ol b e、 g: 输入: “TEXT容器列表元素:0.1[mm]另一个列表元素:0.2span元素” ​ 输出: “TEXTcontainer列表元素:0.1[mm]另一个列表元素:0.2span元素” 我知道我可以通过逐个替换所有标签来实现: string.replace(/<\/span>/g, ''); string.replace(//g',); 也许有更

我需要替换字符串中几乎所有的HTML标记

标签的内容应予以保留

我只想保留几个标签:

  • p
  • 保险商实验室
  • ol
  • b
e、 g:

输入:
“TEXT

容器
  • 列表元素:0.1[mm]
  • 另一个列表元素:0.2
    • span元素” ​ 输出: “TEXT

      container
      • 列表元素:0.1[mm]
      • 另一个列表元素:0.2
        • span元素”
我知道我可以通过逐个替换所有标签来实现:

string.replace(/<\/span>/g, '');
string.replace(//g',);
也许有更快的选择


如何实现它?

最好避免使用正则表达式来解析
Html
,在您的情况下,可以使用Html解析器,例如
DOMParser

htmls=`TEXT

container

    列表元素:0.1[mm]
  • 另一个列表元素:0.2
    • span元素`; 让parser=newdomparser(); 让doc=parser.parseFromString(htmls,“text/html”); 设span=doc.getElementsByTagName(“span”); 设sr=doc.getElementsByTagName(“strong”); 设elmarray=[…Array.from(span),…Array.from(sr)]; elmarray.forEach((e)=>{ e、 outerHTML=e.innerHTML; });
      log(doc.body.innerHTML)我能想到的最好/最快的方法是,正如Sven.hig所建议的,从输入字符串创建一个html DOM,解析它,并对所有要保留的标记使用outerHTML,对其他标记使用innerHTML。
      下面是一段代码片段,它正好做到了这一点:

      /*输入和输出字符串*/
      让输入=“TEXT

      container
      • 列表元素:0.1[mm]
      • 另一个列表元素:0.2
        • span元素”; 让输出=”; /*要保留的标记名数组*/ 让不可删除的标签=[“p”,“li”,“ul”,“ol”,“b”]; /*我们检索给定输入字符串中的每个html元素*/ 让allTagElements=Array.from( 新的DOMParser() .parseFromString(输入,“文本/html”) .getElementsByTagName(“*”) ).filter(element=>(element.tagName!=“HTML”&&element.tagName!=“HEAD”&&element.tagName!=“BODY”)//DOMParser将提供我们不使用的、和标记 for(allTagElements的常量元素){ /*如果同一元素是子节点,我们希望避免打印两次*/ 让alreadyInspected=false; for(所有标记元素的常量检查元素) if(element!=inspectedElement&&inspectedElement.contains(element)) alreadyInspected=true; 如果(!已检查) output+=(nondelatabletags.includes(element.tagName.toLowerCase())?element.outerHTML:element.innerHTML;//如果使用大写字母编写nondelatabletags元素,则可以省略.toLowerCase } 控制台日志(输入);
          控制台日志(输出)这是否回答了您的问题?
          string.replace(/<\/span>/g, '');