首页 > 解决方案 > 删除 jQuery 和 JavaScript 中包含特定文本的所有标签

问题描述

我试图找出如何<p>&nbsp;</p>在 JavaScript 和 jQuery 中从下面的 html 中删除所有实例:

<div id='test'>
<p>some text</p>
<p>&nbsp;</p>
<p>some text</p>
<p>&nbsp;</p>
<p>some text</p>
<p>&nbsp;</p>
<p>some text</p>
</div>

我最接近的是:

$('#test').html().replace(/&nbsp;/gi,''); // only removes &nbsp; but not tags

我如何:
1. 选择所有带有 in 的标签?(在 JS 和 JQ 中)
2. 并删除?
(大概是这样,但不能像上面的1一样测试:JQ:el.remove();JS:el.parentNode.removeChild(el))

我也尝试了以下但无济于事:

$('<p>&nbsp;</p>').replaceAll(''); // fails
$('#test').html().replace('<p>&nbsp;</p>',''); // partially fails
$('#test').html().replace(/<p>&nbsp;</p>/gi,''); // fails
$("p:contains('&nbsp;')").replace('') // fails
$("p:contains('&nbsp;')").replaceWith(''); // fails
$("p:contains('&nbsp;')").remove() // fails?
// fails
var toRemove = $("p:contains('&nbsp;')");
$('#test').remove(toRemove);

有人可以解释我在这里做错了什么吗?我很想知道为什么。感谢您在这里的任何帮助。

标签: javascriptjquery

解决方案


contains仅适用于节点的文本内容,不适用于其 innerHTML。

您可以按内容过滤它们,然后使用remove()

$('p').filter(function() { return $.trim($(this).html()) == '&nbsp;' }).remove();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='test'>
  <p>some text</p>
  <p>&nbsp;</p>
  <p>some text</p>
  <p>&nbsp;</p>
  <p>some text</p>
  <p>&nbsp;</p>
  <p>some text</p>
</div>


推荐阅读