【问题标题】:Remove HTML Tags From A String, Using jQuery使用 jQuery 从字符串中删除 HTML 标签
【发布时间】:2012-01-31 07:42:45
【问题描述】:

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

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

如何将s 转换为 jQuery 对象?我的目标是删除&lt;p&gt;s 和&lt;/p&gt;s。我本可以使用正则表达式来做到这一点,但那是not recommended

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

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

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 解析的帖子)。

【讨论】:

  • $("P", o); 不会工作。它与o.find('p') 相同,意味着它查找p-选定元素的后代。但是选中的元素已经是p 元素了。
  • @FelixKling - 你是绝对正确的......我不应该在凌晨 2 点写代码。我将更新我的示例,因为我认为上下文选择器是一个有用的选项。
【解决方案2】:

要获取那里的所有字符串,请使用

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

【讨论】:

    【解决方案3】:

    如果你不想要正则表达式,你为什么不直接:

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

    【讨论】:

    • 除非这 正是 OP 需要的表达式,否则如果标签大小写不同或标签中有属性,字符串替换将中断。
    • 虽然它只改变了第一次出现 =\ 我不会说 s = s.replace(//i, '');不好
    • 哦,当然,如果涉及到属性解析,它也是一个简单的正则表达式...... s = s.replace(/]*>/i, '');
    • 对 SO(包括我)的普遍共识是使用正则表达式解析 HTML 不是理想的解决方案:stackoverflow.com/questions/1732348/…。它在简单的情况下工作,但即使与使用浏览器的 DOM 的 jQuery 或健壮的服务器端解析器相比,它也非常脆弱,它逐个字符地解析并解释有效/无效 HTML 中存在的所有可能性。
    • 这个答案与使用正则表达式的问题完全相同。虽然我同意,如果问题中提到的“简单字符串”将可靠地遵循该格式,那么字符串替换(有或没有正则表达式)就可以了。
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2021-06-21
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多