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
9 Answers 9
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.
Comments
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/
Comments
Yes using this:
var string = "<br/>Hi";
var stringStripped = string.replace(/(<([^>]+)>)/ig,"");
alert(stringStripped);
Comments
You could replace html-tag with regex pattern
var string = string.replaceAll("<[^>]*>", "");
Comments
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"
Comments
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"
Comments
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.
2 Comments
jQuery.append()
here is wildly inefficient compared to string concatenation.try this:
var string = "<br/Hi>".replace(/'/g, '\'').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '\'');
alert(string);
string
get populated? You could do something like$(string).text()
, but there's probably a much more efficient way that doesn't involvejQuery
.