admin管理员组

文章数量:1134247

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?

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?

Share Improve this question edited Mar 24, 2023 at 11:06 Philipp Kyeck 18.8k19 gold badges88 silver badges125 bronze badges asked Mar 8, 2011 at 20:32 Phillip SennPhillip Senn 47.6k91 gold badges260 silver badges378 bronze badges 5
  • 1 Not working how? What are you then doing with X? – Erik Forbes Commented Mar 8, 2011 at 20:33
  • Oh, if I say X=$td.html() it works. – Phillip Senn Commented Mar 8, 2011 at 20:34
  • 8 Remember that .text() strips out markup, thus I don't believe you're going to find   in a non-markup result. – Brad Christie Commented Mar 8, 2011 at 20:34
  • 1 I may be wrong here, but doesn't text() expand html entities? – Dennis Kreminsky Commented Mar 8, 2011 at 20:35
  • \u00A0 - unicode nbsp \x20 - ascii space <p>&nbsp;P1nbsp</p> In browser console: /\u00A0/.test($0.childNodes[0].nodeValue[0]) Display "true" – Ramil Shavaleev Commented Apr 8, 2019 at 6:43
Add a comment  | 

4 Answers 4

Reset to default 405

&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

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.

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.

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.

本文标签: jqueryHow is a nonbreaking space represented in a JavaScript stringStack Overflow