0

I need to replace all <br /> with a space. The below is the string that gets spitted out dynamically and i need to hide the br tags...

M,W,Th,F 7:30 AM - 4:00 PM<br />Tu 7:30 AM - 6:00 PM<br />

What am i doing wrong?is it possible to replace all other br tags with a comma except the last one, which will be repalced by a space

$('.WorkingHours').text().replace(/<br />/g, " "); 
Anjana Sharma
  • 4,535
  • 5
  • 37
  • 51

5 Answers5

5

There are three issues with your code:

  1. $('.WorkingHours').text() won't contain any HTML (so no br tags either), it only returns the text content of elements.
    $('.WorkingHours').text() returns:

    M,W,Th,F 7:30 AM - 4:00 PMTu 7:30 AM - 6:00 PM

    whereas $('.WorkingHours').html() returns:

    M,W,Th,F 7:30 AM - 4:00 PM<br>Tu 7:30 AM - 6:00 PM<br>

  2. You have to escape the inner backslash in your expression. Edit: Having a look at the output of .html() it actually does not contain <br /> but <br>. This might depend on the doctype of the document (not working example, working example).

  3. You have to assign the value back to the element.

You might be able to do

$('.WorkingHours').html(function(i, html) {
    return html.replace(/<br\s*\/?>/g, " "); 
});

but it would be much cleaner to not use regular expressions at all:

$('.WorkingHours').find('br').replaceWith(' ');

This finds all br element nodes and replaces them with a text node containing only a space.

DEMO

Update (in response to one of your comments): If you want to replace the last br with a full stop, you can use .last():

$('.WorkingHours')
 .find('br').last().replaceWith('.')
 .end().replaceWith(' ');

DEMO

Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143
1

Couple things:

use html() to get the HTML of the node:

var rawHTML = $('.WorkingHours').html();

Use \ to escape the / within your regex:

/<br \/>/g

Set the HTML to the return value of the replace function:

$('.WorkingHours').html(rawHTML.replace(/<br \/>/g, ' ');

End Product:

var rawHTML = $('.WorkingHours').html();
$('.WorkingHours').html(rawHTML.replace(/<br \/>/g, ' ');
zzzzBov
  • 174,988
  • 54
  • 320
  • 367
0

using .text() instead of .html() to remove html tags

.text() only returns the inner text, instead of the inner html.

bevacqua
  • 47,502
  • 56
  • 171
  • 285
0

I think you need to escape the forward-slash in the expression, e.g.

$('.WorkingHours').text().replace(/<br \/>/g, " "); 
danwellman
  • 9,068
  • 8
  • 60
  • 88
0

You need to escape the forward slash in the <br />:

$('.WorkingHours').text().replace(/<br \/>/g, " "); 

http://jsfiddle.net/uLYrH/1

Richard Dalton
  • 35,513
  • 6
  • 73
  • 91