178

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?

Philipp Kyeck
  • 18,402
  • 15
  • 86
  • 123
Phillip Senn
  • 46,771
  • 90
  • 257
  • 373

4 Answers4

381

  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

Timo Tijhof
  • 10,032
  • 6
  • 34
  • 48
Andrew Moore
  • 93,497
  • 30
  • 163
  • 175
8

Remember that .text() strips out markup, thus I don't believe you're going to find   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.

Brad Christie
  • 100,477
  • 16
  • 156
  • 200
  • 2
    Using jQuery we can see that `$("
     
    ").text().charCodeAt()` gives `160` (unicode for nbsp)
    – cobbal Mar 08 '11 at 20:38
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.

JAAulde
  • 19,250
  • 5
  • 52
  • 63
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.

Jacob Mattison
  • 50,258
  • 9
  • 107
  • 126