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

30

我有一些像这样的HTML:

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

我想要做的是使用jQuery删除div中的所有span标签,而不考虑它们所附加的class属性,但保留span标签内的文本内容。因此最终结果将是:

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

我尝试使用unwrap()方法,但它会展开div。我也尝试过删除元素,但那会同时删除元素和它们的文本。

3个回答

87

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


1
似乎实际上并没有起作用,在上面的示例HTML上尝试了一下。编辑:我正在使用1.3.2,可能是时候升级了! - Erik
它删除所有的span标签:P - Harshit Gupta
@harshitgupta 它应该只是用它们的内容替换标签。我刚刚再次检查了演示,它似乎按照广告所述正常工作。您是否遇到了完全丢失内容的情况? - Sampson
@JonathanSampson 不不不,误解了...实际上你的代码删除了文件中所有存在的span标签,而且没有丢失它们的数据,这正是代码所期望的。我的要求是删除与特定类相关联的span标签。在帮助下我成功做到了,非常感谢。 - Harshit Gupta
如果所讨论的text()只是像<img/>这样的另一个标签,请小心,这将会将其删除。 - Ian Warner
显示剩余2条评论

1

不使用解包,简单的$('#my-div').text ($('#my-div').text ())就足够了吧?


-1
$(mydiv).html($(mydiv).text()) 

应该可以解决问题。


如果.text()中的文本包含转义的HTML,则使用.html(text)将呈现为实际的HTML。 - Uyghur Lives Matter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接