使用jQuery从字符串中删除HTML标签

11

我有一个简单的字符串,例如。

var s = "<p>Hello World!</p><p>By Mars</p>";

我该如何将s转换为jQuery对象?我的目标是删除<p></p>。我可以使用正则表达式来完成这个任务,但这并不是一个推荐的方法。

2
你只需要更好地阅读文档:http://api.jquery.com/jQuery/#jQuery2 - Felix Kling
@hippietrail:后者。即被接受的答案,即.text()已经满足了我的需求。 - moey
3个回答

10

在最简单的形式下(如果我理解正确):

var s = "<p>Hello World!</p><p>By Mars</p>";
var o = $(s);
var text = o.text();

或者你可以使用一个带有搜索上下文的条件选择器:

// load string as object, wrapped in an outer container to use for search context
var o = $("<div><p>Hello World!</p><p>By Mars</p></div>");

// sets the context to only look within o; otherwise, this will return all P tags
var tags = $("P", o); 

tags.each(function(){
    var tag = $(this); // get a jQuery object for the tag
    // do something with the contents of the tag
});

如果你正在解析大量的HTML(例如,解释屏幕抓取结果),请使用服务器端的HTML解析库,而不是jQuery(关于HTML解析的这里有很多帖子)。


1
$("P", o);"不起作用。它与o.find('p')相同,意思是查找所选元素的后代中的p元素。但所选元素已经是p元素。 - Felix Kling
@FelixKling - 你是完全正确的...我不应该在凌晨2点编写代码。我会更新我的示例,因为我认为上下文选择器是一个有用的选项。 - Tim M.

1

要获取所有的字符串,请使用以下方法

var s = "<p>Hello World!</p><p>By Mars</p>";
var result = "";
$.each($(s), function(i){
    result += " " + $(this).html();
});

0

如果你不想使用正则表达式,为什么不直接这样做:

var s = "<p>Hello World!</p><p>By Mars</p>";
s = s.replace('<p>', '').replace('</p>', '');

1
除非那正是 OP 需要的表达式,否则字符串替换将会在标签大小写不同或标签内有属性时出现错误。 - Tim M.
虽然它只更改第一次出现 = \ 我不会说 s = s.replace(/ <\ /?p> / i,''); 是不好的。 - Mr. BeatMasta
当涉及到属性解析时,这只是一个简单的正则表达式... s = s.replace(/</?p[^>]*>/i, ''); - Mr. BeatMasta
SO(包括我在内)的普遍共识是,使用正则表达式解析HTML不是理想的解决方案:https://dev59.com/X3I-5IYBdhLWcg3wq6do。它适用于简单情况,但即使与像使用浏览器的DOM或强大的服务器端解析器相比,其非常脆弱,而且无法涵盖在有效/无效HTML中存在的所有可能性。 - Tim M.
1
这个答案与使用正则表达式完全相同。虽然我同意,如果问题中提到的“简单字符串”将可靠地遵循该格式,则使用字符串替换(带或不带正则表达式)就可以很好地解决问题。 - nnnnnn
显示剩余3条评论

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