【问题标题】:How to remove variable number of p tags from a string in jQuery如何从jQuery中的字符串中删除可变数量的p标签
【发布时间】:2014-10-19 22:01:00
【问题描述】:

我有一个包含可变 HTML 内容的字符串。字符串可以包含一个、多个或不包含 p 标签,这些标签上也可能有类。

使用 jQuery删除所有 p 标签,同时保留每个标签的 HTML 内容的最佳方法是什么。

我首先尝试了以下方法,但当然,这只有在我将整个字符串包裹在一个段落中时才有效,并且它不会涵盖段落是否具有类或其他属性:

str.substring(3).slice(0, -4);

编辑

这是一个示例,但 p 标签的数量可能会有所不同,也可能根本没有。

之前的示例:

<p>Some text <p class="someClass"> Some other text</p> Some more text</p>

之后的示例:

"Some text Some other text Some more text"

【问题讨论】:

  • 您能否发布一个包含要删除的内容的字符串示例,以及删除后您希望它是什么?
  • 当然,会更新我的帖子。
  • 您希望内容保持原样并删除包裹它的p 标签?
  • 是的,没错。
  • 是什么产生了这个(无效的)HTML,你可能有更好的运气解决问题,而不是治疗症状。

标签: javascript jquery html paragraph


【解决方案1】:

使用Unwrap$('p').contents().unwrap()

它与 wrap 相反,它删除了选择器的父级。 p 标签是内容的父元素,在解包前选择内容将解包p 标签。 jsFiddle

【讨论】:

  • 是的,但是,鉴于问题中的 HTML 字符串,如果它不能完全按照您的意愿工作,我不会感到惊讶。
  • 谢谢。那么 Regex 会是更好的方法吗?
  • Unwrap 是这样做的方法,但它并不像提供的示例中那么简单。
  • 它会找到body中所有的p标签并解包。如果您想在特定部分触发它,请使用 HTML:&lt;article&gt;&lt;p&gt;Hello&lt;/p&gt; &lt;p&gt;World&lt;/p&gt;&lt;/article&gt;,jQuery:$('article p').contents().unwrap()
  • @user2571510 如果你有一个像'&lt;p&gt;one&lt;/p&gt;&lt;span&gt;span&lt;/span&gt;&lt;p&gt;two&lt;/p&gt;' 这样的字符串,你会如何使用上面的例子呢?
【解决方案2】:

您可以使用regular expression 来执行此操作。它只删除 p-tags 并保留所有其他标签。

JavaScript

var string = "<p>this is a test with <p class='bold'>multiple</p> p-tags.</p><span>THIS IS COOL</span>";
var result = string.replace(/<[\/]{0,1}(p)[^><]*>/ig,"");

console.log(result);

FIDDLE

如果您想删除所有标签,您可以使用/(&lt;([^&gt;]+)&gt;)/ig 作为正则表达式。

【讨论】:

  • 谢谢!通常我会尽量避免使用正则表达式,但我认为在这种情况下这是有道理的,并且所有其他建议都不适用于我的情况。 :)
【解决方案3】:

尝试以下方法:

var str = "<p>Test</p>";
var res = str.replace("<p>", "").replace("</p>", "");

【讨论】:

  • 谢谢 - 这不会涵盖带有类或样式属性的 p 标签。
  • 或者不止一个&lt;p&gt;&lt;/p&gt;
【解决方案4】:

如果我理解正确,并且您希望删除 p 标签但内容仍然存在,那么它应该很简单:

str.replace('<p>', '').replace('</p>', '');

【讨论】:

  • 谢谢 - 这不会涵盖带有类或样式属性的 p 标签。
【解决方案5】:

您还可以使用 replaceWith - jsFiddle Example,可读且可与父/子标签一起使用

$('p').replaceWith($('p').text())

【讨论】:

  • 谢谢!这是否也包括多个 p 标签以及带有类或其他属性的 p 标签?
  • 再一次,你将如何将它用于字符串,而不是 DOM 节点?你有'&lt;p&gt;one&lt;/p&gt;&lt;span&gt;span&lt;/span&gt;&lt;p&gt;two&lt;/p&gt;' 字符串,你将如何从中删除所有p
  • @dfsq 这不是提问者提出的 HTML 结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
相关资源
最近更新 更多