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

d-_*_*_-b 5 javascript

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

我可以直接粘贴到代码中,这有效.我只是好奇为什么第一种方法不起作用.

谢谢!

ick*_*fay 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中包含►字符串转义符\u25ba.(9658 10转换为16基数为26BA 16)


jos*_*736 6

对方的回答是,一个HTML文档的标题是纯文本正确,不能包含标记.

但是,要清楚,你可以使用&#9658;在HTML源(即<title>&#9658;</title>).该解析器将实体转换成字符串在适当的字符被存储在DOM.

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

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

document.title = '\u25ba Playing';
Run Code Online (Sandbox Code Playgroud)