4

I use substr() on a string to output a set of characters from a message. My problem is that if the string contains HTML I would get the tags in the text.

Is it possible to parse the HTML before using substr() to only extract the text from the message itself?

Example 1:

var string = "Hi";
alert(string.substr(0, 7));

Alert:

Hi


Example 2:

var string = "<br/>Hi";
alert(string.substr(0, 7));

Alert:

<br/>Hi

asked Jan 8, 2014 at 16:53
2
  • How does string get populated? You could do something like $(string).text(), but there's probably a much more efficient way that doesn't involve jQuery. Commented Jan 8, 2014 at 16:55
  • 1
    Have a look at the accepted answer to this question: stackoverflow.com/questions/10585029/… Commented Jan 8, 2014 at 16:56

9 Answers 9

4

Using jQuery.text() method, you can extract only the text.

var str = "<br/>Hi"
$('<p>' + str + '</p>').text(); //Wrap your input in a p element first to ensure you get the text if your string isn't wrapped in HTML.
answered Jan 8, 2014 at 16:59

Comments

2

You can remove the html via a regex, see the answer here and you can do something like this:

String.prototype.removeHtml=function(){
 return this.replace(/(<([^>]+)>)/ig,"");
}
var string = "<br/>Hi";
alert(string.removeHtml().substr(0, 7));

Fiddle: http://jsfiddle.net/fx3MJ/

Remove HTML Tags in Javascript with Regex

answered Jan 8, 2014 at 16:58

Comments

2

Yes using this:

var string = "<br/>Hi";
var stringStripped = string.replace(/(<([^>]+)>)/ig,"");
alert(stringStripped);

http://jsfiddle.net/hutchonoid/7T56N/

answered Jan 8, 2014 at 16:59

Comments

1

You could replace html-tag with regex pattern

var string = string.replaceAll("<[^>]*>", "");
answered Jan 8, 2014 at 17:00

Comments

1

If you input is read in the DOM, you can use jQuery to get just the text. Example :

<p id="foo"><br />Hi</p>
var string = $('#foo').text();
alert(string.substr(0, 7)); //says "Hi"

See jQuery doc for reference.

Edit: If your input comes from somewhere else, you can still use jQuery, but there may be better solution.

var input = "<br />Hi";
var fakeElement = $('<div>' + input + '</div>');
var string = fakeElement.text();
alert(string.substr(0, 7)); //says "Hi"
crush
17.1k10 gold badges65 silver badges104 bronze badges
answered Jan 8, 2014 at 16:57

Comments

1

If you want to get the text with HTML tag, try to use .innerHTML from jQuery.

<p id="foo"><br />Hi</p>


$("#foo")[0].innerHTML;

Console: "<br />Hi"

answered Jan 8, 2014 at 17:12

Comments

0

You could leverage jQuery's text() function:

 $('<div>').append('<br />hi').text();

This creates a new element, to which you can append your markup, and then use text() to extract the text. A little round-about, but it works.

I'd recommend a regex solution over this.

answered Jan 8, 2014 at 16:59

2 Comments

Interesting, I'll have to tuck that away!
0

try this:

var string = "<br/Hi>".replace(/&#39;/g, '\'').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&apos;/g, '\'');
alert(string);
answered Jan 8, 2014 at 17:03

Comments

0

Try this

var string = "<br/>Hi";
alert($('<span>'+string+'</span>').text().substr(0, 7));

FIDDLE

answered Jan 8, 2014 at 17:03

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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.