为什么HTML符号▶不工作在document.title

why does the HTML symbol for ▶ not work in document.title

本文关键字:document title 工作 HTML 符号 为什么      更新时间:2023-09-26

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

我能够粘贴▶直接到代码,这是有效的。我只是好奇为什么第一种方法不行。

谢谢!

&#9658;是HTML实体引用,而document.title不包含HTML;它包含纯文本。例如,如果我将document.title设置为<strong>Hello</strong> <em>world</em>,它将逐字显示,而不是显示Helloworld。HTML的其他部分也是如此,包括实体引用。

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

如果浏览器出于某种原因将您的页面解释为与实际不同的字符编码,则从字面上包含字符可能会导致问题。HTML实体在HTML中可以防止这种情况,但是在JavaScript中也有一种方法可以转义它们。特别是,您可以包含►在JavaScript中使用字符串转义'u25ba(965810转换成16进制为26BA16)

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

但是,为了清楚起见,您可以在HTML源中使用&#9658;(即<title>&#9658;</title>)。解析器将实体转换为存储在DOM中的字符串中的适当字符。

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

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

document.title = ''u25ba Playing';