Javascript 在JS中替换几乎所有的HTML标记,而不使用字符串形式
我需要替换字符串中几乎所有的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',); 也许有更
- p
- 李
- 保险商实验室
- ol
- b
输入:
“TEXT容器- 列表元素:0.1[mm]
- 另一个列表元素:0.2
span元素”
输出:
“TEXTcontainer- 列表元素:0.1[mm]
- 另一个列表元素:0.2
span元素”
我知道我可以通过逐个替换所有标签来实现:
string.replace(/<\/span>/g, '');
string.replace(//g',);
也许有更快的选择
如何实现它?最好避免使用正则表达式来解析
Html
,在您的情况下,可以使用Html解析器,例如DOMParser
htmls=`TEXTcontainer列表元素: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。
下面是一段代码片段,它正好做到了这一点:
/*输入和输出字符串*/
让输入=“TEXTcontainer- 列表元素: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, '');