30

I got HTML element contains this:

  <!--Product Style-->  <div style="float: right; padding-top: 4px; padding-bottom: 5px;">  P6C245RO </div>  <div style="text-transform: uppercase; font-weight: bold; padding-top: 4px; padding-bottom: 5px;">  Style </div>  <div style="clear: both; border-top: 1px solid rgb(216, 216, 216); padding-top: 4px;">  <!--Product Description-->  <div style="font-size: 11px ! important;"></div>  <div style="background: url(&quot;http://ii.armaniexchange.com/ArmaniExchange/images/en_US/global/globalgraphics/bullet.gif&quot;) no-repeat scroll 0pt 4px transparent; padding-left: 12px;">fine tonal striped fabric</div>  <div style="background: url(&quot;http://ii.armaniexchange.com/ArmaniExchange/images/en_US/global/globalgraphics/bullet.gif&quot;) no-repeat scroll 0pt 4px transparent; padding-left: 12px;">epaulettes and sleeve tab</div>  <div style="background: url(&quot;http://ii.armaniexchange.com/ArmaniExchange/images/en_US/global/globalgraphics/bullet.gif&quot;) no-repeat scroll 0pt 4px transparent; padding-left: 12px;">metal logo plate on the chest pocket</div>  

When i read it using jquery i get the .text() contains a lot of spaces and /n in between the text but without the html tags.

How to remove all these white spaces and return the clean text using jquery or pure javascript?

4 Answers 4

68
element.text().replace(/\s+/g, " ");

This uses a regular expression (/.../) to search for one or more (+) whitespace characters (\s) throughout the element's text (g, the global modifier, which finds all matches rather than stopping after the first match) and replace each with one space (" ").

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

3 Comments

+1 I misread the question. That will work great for spaces and newlines (what the OP said he needed). Be aware that some browsers don't quite implement \s correctly once you get into non-ASCII whitespace (thinkweb2.com/projects/prototype/whitespace-deviations), but that's a niggle. :-)
You're missing your g (global indicator).
@patrick Yes, after adding the 'g' (global indicator), things worked perfect.
23

For the string

"    this  is my   string       "

You probably want to make the excessive spaces single spaces, but remove the leading and trailing spaces entirely. For that, add another .replace

s.replace(/\s+/g, " ").replace(/^\s|\s$/g, "");

For

"this is my string"

Update

s.replace(/\s+/g, " ").trim()

Thanks, @Pier-Luc Gendreau

6 Comments

You can remove leading and trailing whitespace with .trim()
Unfortunately, trim() is not bulletproof. Try it on the string I provided above.
Seems to work over here and looking at the polyfill on MDN, it even looks for BOMs and non-breaking spaces! It does require IE9+ though.
Oh yes, like I said, it removes leading and trailing whitespace so it leaves you with a slightly cleaner implementation. s.replace(/\s+/g, " ").trim()
Makes sense. Thanks!
|
4

You can remove all instances of congruent whitespace and newlines like so

// Note: console.log() requires Firebug

var str = '    this  is \n    some text \r don\'t \t you    know?   ';
console.log( str );

str = str.replace( /[\s\n\r]+/g, ' ' );
console.log( str );

Then to clean it up and apply it to your jQuery

$.trim( $element.text().replace( /[\s\n\r]+/g, ' ' ) )

Comments

-1

This code working fine, Here I have remove extra white spaces in TextEditor.

var htmlstring =   $("#textareaCode").html().replace(/(&nbsp;)*/g, "");

for more Deatils refer: http://www.infinetsoft.com/Post/How-to-remove-nbsp-from-texteditor-in-jQuery/1226#.V0J-2fl97IU

Comments

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.