使用 jQuery 删除元素但保留文本

Posted

技术标签:

【中文标题】使用 jQuery 删除元素但保留文本【英文标题】:Remove element with jQuery but leave text 【发布时间】:2011-01-19 11:37:54 【问题描述】:

我有一些看起来像这样的 html

<div>
    <span class="red">red text</span> some more text <span class="blue">blue text</span>
</div>

我想要做的是使用 jQuery 删除 div 中的所有跨度,无论附加类如何,但将跨度标签内的文本留在后面。所以最终的结果是:

<div>
    red text some more text blue text
</div>

我尝试使用unwrap() 方法,但它会打开 div。我也尝试删除元素,但删除了元素及其文本。

【问题讨论】:

【参考方案1】:

jQuery 1.4+

你不想解开 span,你想解开它的内容:

$("span").contents().unwrap();

在线演示:http://jsbin.com/iyigi/edit

jQuery 1.2+

对于早期版本的 jQuery,您可以执行以下操作:

$("span").replaceWith(function () 
    return $(this).text();
);

在线演示:http://jsbin.com/iyigi/40/edit

【讨论】:

来自文档:从 DOM 中删除匹配元素集的父元素,将匹配元素留在原处。 所以我想这就是它应该如何工作的。如果有办法选择文本节点,那么您可以使用 unwrap。 实际上似乎不起作用,只是在上面的示例 HTML 上试了一下。编辑:我使用的是 1.3.2,猜测升级时间! Erik,确保您使用的是 jQuery 1.4+ 它删除所有跨度标签:P @harshitgupta 它应该只是用它们的内容替换标签。我刚刚再次检查了演示,它似乎像宣传的那样工作。您是否正在完全丢失内容?【参考方案2】:

一个简单的$('#my-div').text ($('#my-div').text ()) 就够了,不用解包吗?

【讨论】:

【参考方案3】:
$(mydiv).html($(mydiv).text()) 

应该可以解决问题。

【讨论】:

如果来自.text() 的文本包含转义的HTML,那么使用.html(text) 将被呈现为实际的HTML。

以上是关于使用 jQuery 删除元素但保留文本的主要内容,如果未能解决你的问题,请参考以下文章

用 jquery 分离表单元素但保留文本

使用 jquery 如何删除锚标记 <a> 但保留内容?

Jsoup 删除嵌套标签但保留文本

使用 jQuery 在单击时删除父元素

sql 使用jquery从元素中删除特定文本

detach与remove区别,以及detach保留被删除的元素数据,使用