Javascript 展开仅保留第一级的HTML标记

Javascript 展开仅保留第一级的HTML标记,javascript,jquery,html,Javascript,Jquery,Html,我有这篇课文 "Welcome to my city. <span><span><span>Hello</span> my</span> good</span> friend" 我想使用jQuery或javascript打开所有span标记,只保留第一级, 理想的产出将是: "Welcome to my city. <span>Hello my good</span> friend" 提前谢谢。如

我有这篇课文

"Welcome to my city. <span><span><span>Hello</span> my</span> good</span> friend"
我想使用jQuery或javascript打开所有span标记,只保留第一级, 理想的产出将是:

"Welcome to my city. <span>Hello my good</span> friend"

提前谢谢。

如果文本在字符串中,可以使用如下正则表达式:

var string='欢迎来到我的城市。你好,我的好朋友; var regex=/.*/g; var insideOfSpan=regex.execstring; var strippedpspan=insideOfSpan[1]。替换//g; string=string.replace/*/,“$1”+strippedSpan+“$2”;
console.logstring 您可以通过将HTML注入元素,然后爬网其子节点来解析HTML,按原样输出文本节点,并通过读取.textContent并替换.innerHTML来转换顶级元素的内容

函数TopLevelNodeOnlyHTML{ 让div=document.createElement'div'; div.innerHTML=html; 放出=; //使用[…someVar]将类似数组的内容转换为实际数组 […div.childNodes].forEachnode=>{ //如果节点是文本节点,请将其文本添加到输出字符串中 如果node.nodeType==3{ out+=node.wholeText; }否则{ //如果是其他内容,请将其内容替换为文本 //它的内容是什么 node.innerHTML=node.textContent; //将生成的html添加到输出中 out+=node.outerHTML; } }; 返回; }
控制台。LogTopLevelNodeOnly`欢迎来到我的城市。你好,我的好朋友`;你想用javascript来做吗?在预处理器中?服务器端?什么看起来你自己已经打开了它们:-我想你没有看到标签javascript和jqueryYou是对的,我错过了这些。我的错。jQuery本可以给我通风报信,但javascript可能仍然意味着预处理。谢谢。但是,如果span标记包含更多的信息,如类、id,它将无法正常工作。我更新了答案,现在它应该可以与属性一起工作。尝试用RegExp解析HTML,它太脆弱,很容易崩溃,特别是当你得到一些格式错误或恶意的HTML时。我同意,出于某种原因,我认为这是OP想要的。重读这个问题,我不知道为什么:使用DOMParser或像您在回答中那样创建元素是一个更好的解决方案。