JavaScript字符串如何表示不间断空格?


109

这显然不起作用:

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

是否有不间断的空格或JavaScript不喜欢的&号?


1
不工作怎么办?那你用X做什么呢?
Erik Forbes

哦,如果我说X = $ td.html()可以。
菲利普·森

8
请记住,这会.text()删除标记,因此我相信您不会 在非标记结果中找到它。
布拉德·克里斯蒂

1
我在这里可能是错的,但是text()不会扩展html实体吗?
丹尼斯·克雷明斯基2011年

@Brad-您应该已经回答了。= P
Erik Forbes

Answers:


251

 是HTML实体。这样做时.text(),所有HTML实体都被解码为它们的字符值。

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

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

或者,您也可以通过字符代码以Java逸出形式手动创建字符:

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

有关更多信息,String.fromCharCode请参见:

fromCharCode-MDC文件中心

有关不同字符集的字符代码的更多信息,请参见:

Windows-1252字符集
UTF-8字符集


@cobbal:非常正确……那实际上是最简单的方法。
Andrew Moore

3
哇。这个答案太复杂了,一定是正确的!(我和JavaScript就像油和水一样)。但是,如果我猛烈地摇晃,我们会混在一起的。
菲利普·森

普通空格正在中断,因此它是'\ x20',但最好使用''。
帕特里克·萨扎斯基

7

请记住,这会.text()删除标记,因此我相信您不会 在非标记结果中找到它。

做出答案...。

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

显示警报,因为将返回与标记等效的ASCII码。


2
使用jQuery,我们可以看到,$("<div>&nbsp;</div>").text().charCodeAt()160(Unicode进行NBSP)
cobbal

2

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


0

的jQuery文档text()

由于不同浏览器中HTML解析器的不同,返回的文本可能在换行符和其他空格中有所不同。

我会$td.html()改用。


这会将html标签添加到页面的标记中。例如,字符串“ <文本>”将是一个html元素。
Barh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.