如何在 JavaScript 字符串中表示不换行空格?

这显然行不通:

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

是不是有些关于不换行空格或者 & 符号的东西 JavaScript 不喜欢?

173910 次浏览

 是一个 HTML 实体。当执行 .text()时,所有的 HTML 实体都被解码为它们的字符值。

不要使用实体进行比较,而是使用实际的原始字符进行比较:

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

或者你也可以从字符代码中手动创建字符,使用 Javascript 转义形式:

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

有关 String.fromCharCode的详细资料,请按此处:

来自 CharCode-MDC 文件中心

有关不同字符集的字符代码的更多信息,请点击这里:

Windows-1252 Charset
UTF-8 Charset

当浏览器呈现页面时,该实体转换为其表示的字符。JS (jQuery)读取呈现的页面,因此不会遇到这样的文本序列。它遇到这种情况的唯一方法是您是双重编码实体。

记住,.text()去掉了标记,因此我不相信您会在非标记结果中找到  

做出了一个答案。

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

显示一个警报,因为返回的是等效于标记的 ASCII。

text()的 jQuery 文档说

由于 HTML 解析器的变化 在不同的浏览器中,文本 返回的内容可能会有所不同 其他空白处。

我会用 $td.html()代替。