Anjana Sharma
Anjana Sharma

Reputation: 4745

remove all instances of a character in a string with something else javascript

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

Upvotes: 0

Views: 8584

Answers (5)

Felix Kling
Felix Kling

Reputation: 816442

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

Upvotes: 5

zzzzBov
zzzzBov

Reputation: 179046

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, ' ');

Upvotes: 1

Richard Dalton
Richard Dalton

Reputation: 35793

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

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

http://jsfiddle.net/uLYrH/1

Upvotes: 0

danwellman
danwellman

Reputation: 9253

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

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

Upvotes: 0

bevacqua
bevacqua

Reputation: 48476

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

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

Upvotes: 0

Related Questions