0

So I am receiving unclean content from an API that our content publishers are using and I am getting P tags with non-breaking spaces inside of them and I want to remove the non-breaking space and the P it is in. It would be nice if they cleaned up their content before they published it to the API, but I just need a quick way to remove this via JavaScript or jQuery. I get this error when using the code below. "Syntax error, unrecognized expression:  " Thanks for any help.

<p>&nbsp;</p>

$("p").each(function() {
    $(this).find('&nbsp;').remove();
});
Justin
  • 416
  • 3
  • 9
  • 26

3 Answers3

6

Select your paragraph elements, filter out the ones that contain only &nbsp; using .filter(), then use .remove():

$('p').filter(function(){
   return this.innerHTML == '&nbsp;';
}).remove();

JSFiddle

Or:

$('p').filter(function(){
   return !$.trim($(this).text());
}).remove();

Which, because .text() handles HTML decoding for you and $.trim() removes outer whitespace, will remove any paragraph that contains only spaces I.E

<p>&nbsp; &nbsp;&nbsp;</p>
George
  • 36,413
  • 9
  • 66
  • 103
1
$(p).each(function(){
 $(this).html($(this).html().replace("&nbsp;", ""));
 $(this).replaceTagName(''); 
 // or $(this).contents().unwrap(); much faster
});
void
  • 36,090
  • 8
  • 62
  • 107
0

This works:

$('p').filter(function () {
    return $(this).html().replace(/&nbsp;/g, '').length === 0
}).remove()

jsFiddle example

While you said "I want to remove the non-breaking space and the P it is in", you only need to remove the P since that will take the &nbsp; with it.

j08691
  • 204,283
  • 31
  • 260
  • 272