Javascript 什么';除了jQuery中的一个特定标记外,从DOM块中剥离所有标记的更好方法是什么?

Javascript 什么';除了jQuery中的一个特定标记外,从DOM块中剥离所有标记的更好方法是什么?,javascript,jquery,dom,Javascript,Jquery,Dom,我有一个HTML片段,我想解析并删除所有HTML标记,但我想保留的特定标记除外。我已经做了,但我认为有更好的方法。 在下面的示例中,我只想保留em标记(以保留强调的文本): html=“Info:这是一个html块,我想对其进行解析和修复”; description=$(html.text(); var ems=$(html).find(“em”);//查找所有em标记 //搜索每个em文本的原始描述,并在它们之间添加标记。 $(ems).each(函数(){ description=descr

我有一个HTML片段,我想解析并删除所有HTML标记,但我想保留的特定标记除外。我已经做了,但我认为有更好的方法。 在下面的示例中,我只想保留em标记(以保留强调的文本):

html=“Info:这是一个html块,我想对其进行解析和修复

”; description=$(html.text(); var ems=$(html).find(“em”);//查找所有em标记 //搜索每个em文本的原始描述,并在它们之间添加标记。 $(ems).each(函数(){ description=description.replace(this.innerHTML,“+this.innerHTML+”); }); 控制台日志(描述);
该代码的结果是:

Info: This is a <em>HTML</em> block that I would like to parse and fix
Info:这是一个我想要解析和修复的HTML块
还有其他的想法吗

不一定必须是jQuery,可以是纯javascript

谢谢

您可以使用

html = "<div><b>Info:</b> <p>This is a <em>HTML</em> block that <span>I would like</span> to parse and fix</p></div>";
var $h = $('<div>'+html+'</div>');
$h.find('*:not(em)').contents().unwrap();

console.log($h.html())
html=“Info:这是一个html块,我想对其进行解析和修复

”; 变量$h=$(''+html+''); $h.find(“*:not(em)”.contents().unwrap(); console.log($h.html())

演示:

听起来像是你想用内容替换所有元素,除了

var tmp=document.createElement('div');
tmp.innerHTML=html;
var tags=tmp.getElementsByTagName('*'),l=tags.length,i;
对于(i=0;i
html = "<div><b>Info:</b> <p>This is a <em>HTML</em> block that <span>I would like</span> to parse and fix</p></div>";
var $h = $('<div>'+html+'</div>');
$h.find('*:not(em)').contents().unwrap();

console.log($h.html())
var tmp = document.createElement('div');
tmp.innerHTML = html;
var tags = tmp.getElementsByTagName('*'), l = tags.length, i;
for( i=0; i<l; i++) {
    if( tags[i].tagName == "EM") continue;
    while(tags[i].firstChild) {
        tags[i].parentNode.insertBefore(tags[i].firstChild,tags[i]);
    }
    tags[i].parentNode.removeChild(tags[i]);
}
var result = tmp.innerHTML;