How is a non-breaking space represented in a JavaScript string?
Asked Answered
S

4

189

This apparently is not working:

X = $td.text();
if (X == ' ') {
  X = '';
}

Is there something about a non-breaking space or the ampersand that JavaScript doesn't like?

Stocky answered 8/3, 2011 at 20:32 Comment(5)
Not working how? What are you then doing with X?Magdalenmagdalena
Oh, if I say X=$td.html() it works.Stocky
Remember that .text() strips out markup, thus I don't believe you're going to find   in a non-markup result.Dreyer
I may be wrong here, but doesn't text() expand html entities?Mears
\u00A0 - unicode nbsp \x20 - ascii space <p>&nbsp;P1nbsp</p> In browser console: /\u00A0/.test($0.childNodes[0].nodeValue[0]) Display "true"Orosco
C
393

&nbsp; is a HTML entity. When doing .text(), all HTML entities are decoded to their character values.

Instead of comparing using the entity, compare using the actual raw character:

var x = td.text();
if (x == '\xa0') { // Non-breakable space is char 0xa0 (160 dec)
  x = '';
}

Or you can also create the character from the character code manually it in its Javascript escaped form:

var x = td.text();
if (x == String.fromCharCode(160)) { // Non-breakable space is char 160
  x = '';
}

More information about String.fromCharCode is available here:

fromCharCode - MDC Doc Center

More information about character codes for different charsets are available here:

Windows-1252 Charset
UTF-8 Charset

Cosmography answered 8/3, 2011 at 20:35 Comment(1)
Ordinary spaces are breaking, so it is '\x20', but better to use ' '.Letters
D
8

Remember that .text() strips out markup, thus I don't believe you're going to find &nbsp; in a non-markup result.

Made in to an answer....

var p = $('<p>').html('&nbsp;');
if (p.text() == String.fromCharCode(160) && p.text() == '\xA0')
    alert('Character 160');

Shows an alert, as the ASCII equivalent of the markup is returned instead.

Dreyer answered 8/3, 2011 at 20:36 Comment(1)
Using jQuery we can see that $("<div>&nbsp;</div>").text().charCodeAt() gives 160 (unicode for nbsp)Kaliningrad
L
2

That entity is converted to the char it represents when the browser renders the page. JS (jQuery) reads the rendered page, thus it will not encounter such a text sequence. The only way it could encounter such a thing is if you're double encoding entities.

Lambert answered 8/3, 2011 at 20:35 Comment(0)
R
0

The jQuery docs for text() says

Due to variations in the HTML parsers in different browsers, the text returned may vary in newlines and other white space.

I'd use $td.html() instead.

Reuben answered 8/3, 2011 at 20:40 Comment(1)
This will add html tags to your page 's markup. For example, the string '<text>' will be an html element.Vengeance

© 2022 - 2024 — McMap. All rights reserved.