使用jQuery从HTML字符串中删除标签而不使用正则表达式

25

所以我有以下字符串:

var s = '<span>Some Text</span> Some other Text';

结果应该是一个包含内容为“一些其他文本”的字符串。

我尝试了...

var $s = $(s).not('span');

我试过了很多其他的方法,包括使用remove()not()等,但都没有成功。

有什么建议吗?我可以用正则表达式来匹配字符串,但我更喜欢一个通用的jQuery解决方案。

编辑:

我不想使用正则表达式来解决问题,我只是想知道为什么这个例子不能正常工作:http://jsfiddle.net/q9crX/150/


你是否真的将那个HTML添加到DOM中了?在使用jQuery进行选择之前,您需要先将其添加进去。 - Hunter McMillen
6个回答

57
你可以将你的string包裹在jQuery对象中,并进行类似这样的操作:
var removeElements = function(text, selector) {
    var wrapped = $("<div>" + text + "</div>");
    wrapped.find(selector).remove();
    return wrapped.html();
}

使用方法

var removedSpanString = removeElements("<span>Some Text</span> Some other Text", "span");

这种方法的好处在于你可以指定一个 jQuery 选择器来移除元素。比如说,你可能希望从字符串中删除 <th> 元素。在这种情况下,这将非常方便。

希望这有所帮助!


好的,谢谢,这个方法可行,而且不是正则表达式! :) 但请查看我问题的编辑,也许我的jsfiddle示例也有解决方案。 - Fidelis

15

一种非常简单的方法:

var html = '<span>Remove <b>tags &amp; entities</b></span>';
var noTagText = $(html).text();
// ==> noTagText = 'Remove tags & entities'

请注意,此操作将删除标签和 HTML 实体。


11

这可能符合您的需求:

<([^ >]+)[^>]*>.*?</\1>|<[^/]+/>

正则表达式可视化

Debuggex演示

在JavaScript中:

$s = s.replace(/<([^ >]+)[^>]*>.*?<\/\1>|<[^\/]+\/>/ig, "");

它还会删除自闭合标签(例如<br />)。


1
我觉得为任何已有解析器编写正则表达式解析器通常意味着你正在做一些错误的事情。 - bytesized
@bytesized 你说得完全正确,现在我不会以那种方式回答这个问题。 - sp00m
1
很棒的Debuggex可视化! - nycynik
非常感谢您! - fre2ak

4

只需像这样删除HTML标记

演示

var s = '<span>Some Text</span> Some other Text';
var r = /<(\w+)[^>]*>.*<\/\1>/gi;
s.replace(r,"");

这里提供的答案:http://www.webdeveloper.com/forum/showthread.php?t=252483
原文内容如下:

@sp00m - 感谢您的介入,但它只适用于给定的输入...需要根据操作者的要求进行修改。 - Pranay Rana
是的,这个正则表达式真的很棒 :) 它应该对我有用,但我仍然在这里遇到了问题:http://jsfiddle.net/q9crX/150/ - Fidelis
我已经对这个答案进行了负评,因为我不认为使用正则表达式来解析HTML是有效的。特别是当这个问题正在使用jQuery时,它可以轻松地操作DOM节点。 - David Yell
这提供了一个更好的解决方案。https://dev59.com/wWkv5IYBdhLWcg3wdQhT#10585079 - David Yell

3
只需按照以下步骤进行操作:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>

<script>
$(document).ready(function(){
 $("span").not("span div").each(
 function(index, element) {
$("span").remove();
 }
 );
 });

</script>

<span>Some Text</span> Some other Text

2

请查看链接

例如,更具体地针对您的情况:

var s = '<span>Some Text</span> Some other Text';
var $s = s.replace(/<span>(.*)<\/span>/g, "");

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