如何删除一个元素,但不是内部的内容?

问题描述:

如何删除元素,但不包含内容里面的那个元素?如何删除一个元素,但不是内部的内容?

<a href="#"> 
    <span> 
     <img src="pic-1.jpg"/> 
    </span> 
</a> 

我想删除封装了图像的span

这样我就可以得到,

<a href="#"> 

    <img src="pic-1.jpg"/> 

</a> 
+0

[删除HTML标签,但保留的innerHTML](可能的重复http://stackoverflow.com/questions/4232961/remove-a-html-tag-but-keep-the-innerhtml ) – Dzyann 2017-03-01 13:18:40

你需要unwrap

$('img').unwrap(); 
+0

这就是fab fab!谢谢! – laukok 2012-03-17 18:34:33

+0

哦,功能很好。 +1为实际搜索,而不是做我做的。 – 2012-03-17 18:34:51

+0

我知道这是问答老,但解开文字呢?解开一个元素是可能的,但纯文本怎么样? – 2014-08-21 10:23:52

jQuery的功能unwrap()是你在找什么:

取下集的父母来自DOM的匹配元素,将匹配元素留在它们的位置。

查看the API doc page了解更多信息。

+0

非常感谢! :-) – laukok 2012-03-17 18:34:44

你必须修改你的HTML架构的位位置:

<a href="#" id="my_href"> 
    <span id="my_span"> 
     <img src="pic-1.jpg"/> 
    </span> 
</a> 

jQuery的解决方案:

$("#my_href").html($("#my_span").html()); 

非jQuery的解决方案:

document.getElementById("my_href").innerHTML = document.getElementById("my_span").innerHTML; 
+3

像这样使用HTML通常是一种不好的做法。你正在销毁和重新创建节点,而不是简单地重新定位节点,并删除节点。它还会销毁任何处理程序或与'img'元素相关的其他数据。 – 2012-03-17 18:40:37

+2

啊,真的吗?好的,那么我将在未来避免这种情况。 :) – 2012-03-17 18:41:49

+0

这是**不** ** jQuery解决方案! – gdoron 2012-03-17 18:46:54

$(document).ready(function(){ 
    $span = $('span'); 
    $span.replaceWith($span.html()); 
}); 

见例如http://jsfiddle.net/vikastyagi87/Xaa39/6/

+0

我认为这是最完整的答案,因为它也适用于展开文本(不仅仅是DOM元素) – viery365 2017-03-29 02:25:35