为什么▶符号的HTML符号在document.title中不起作用

时间:2013-06-05 03:07:58

标签: javascript

我在设置►时尝试使用document.title,但它没有呈现播放符号,只显示了相同的字符。

我可以将▶直接粘贴到代码中,这样可行。我只是好奇为什么第一种方法不起作用。

谢谢!

2 个答案:

答案 0 :(得分:8)

&#9658;是HTML实体引用,但document.title不包含HTML;它包含纯文本。例如,如果我将document.title设置为<strong>Hello</strong> <em>world</em>,则会按字面显示,而不是显示 Hello world 。任何其他HTML都是如此,包括实体引用。

要明确,可以title标记中包含实体引用。解析页面时将解释它们。但是,document.title在解析文本并替换所有实体后访问该文本。 document.title将访问title标记的文本,而不是最初用于创建它的HTML内部的HTML。同样,设置document.title不会自动解释其中的任何HTML。

如果浏览器出于某种原因使用不同的字符编码来解释您的页面而不是实际的格式,那么在字面上包含字符可能会导致问题.HTML实体在HTML中防止这种情况,但也有一种方法可以在JavaScript中转义它们。特别是,您可以使用字符串escape \u25ba在JavaScript中包含►。 (9658 10 转换为基数16是26BA 16

答案 1 :(得分:6)

other answer是正确的,因为HTML文档的标题是纯文本,不能包含标记。

但是,要明确,您可以在HTML源代码中使用&#9658;(即<title>&#9658;</title>)。 解析器会将实体转换为存储在DOM中的字符串中的正确字符。

设置document.title时,您遇到了问题。即使脚本在HTML文档中内联,HTML解析器也不适用于JavaScript。您的脚本只是将文档的纯文本标题设置为文字ampersand-pound-9658-semicolon,因为该字符序列在脚本中没有特殊含义。

如果要转义脚本源中的字符,请使用JavaScript escape sequence。 JavaScript中的Unicode转义序列需要Unicode代码点的十六进制表示,并且您的实体使用十进制表示(9568)。转换为十六进制,我们得到25BA:

document.title = '\u25ba Playing';