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, " "); 
1

5 Answers 5

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

Sign up to request clarification or add additional context in comments.

3 Comments

Shouldn't $('.WorkingHours').find('br').remove() be more appropriate?
@SKS: I wanted to suggest that, but it won't add a space.
@FelixKling true. missed that space.. my bad.
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, ' ');

Comments

0

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

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

Comments

0

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

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

1 Comment

$('.WorkingHours').text() won't contain any HTML, so no <br /> tags either.
0

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

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

http://jsfiddle.net/uLYrH/1

2 Comments

how do i find out if it is the last br tag and replace it with "."??
Your fiddle works because you are working with a string, but $('.WorkingHours').text() won't contain any HTML.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.