5

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

我可以将 ▶ 直接粘贴到代码中,这很有效。我只是好奇为什么第一种方法行不通。

谢谢!

4

2 回答 2

8

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

为了清楚起见,您可以title在标签中包含实体引用。当页面被解析时,它们将被解释。但是,document.title在文本被解析并替换所有实体后访问文本。document.title将访问标签的文本title而不是最初用于创建标签的 HTML。同样,设置document.title不会自动解释其中的任何 HTML。

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

于 2013-06-05T03:10:38.137 回答
7

另一个答案是正确的,因为 HTML 文档的标题是纯文本,不能包含标记。

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

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

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

document.title = '\u25ba Playing';
于 2013-06-05T03:24:34.547 回答