我正在尝试显示一个代码段,该代码段可能采用类似HTML / XML的语言。为了逃脱HTML实体,我碰巧发现以下代码有效:
<!-- html code -->
<pre><code id="foo"></code></pre>
// js code
document.querySelector('#foo').textContent = '<p>a paragraph</p>';
[innerText
也可以,但是innerHTML
无效,这是预期的。
我已经在最新的Chrome和Firefox上进行了测试,但是不确定textContent
和innerText
的自动转义在其他主流浏览器中是否具有良好的支持。相关的DOM和HTML API规范对此似乎有点含糊。
那么规范是否要求这种行为,因此是一种安全的转义字符串方法?
了解它们之间的区别很重要:
当您设置existing DOM节点的textContent
时,您使用的是浏览器提供的API,该API将采用您提供的任何文本,并使用给定的字符串创建一个类型为text
的新DOM节点。字符作为其内容。当您这样做时,HTML根本不相关:不使用HTML解析器。因此,HTML实体表示法不是必需的,实际上,如果您尝试使用它,最终将得到包含文字HTML实体表示法的文本节点。
当然,在HTML源代码中,您必须使用HTML实体符号来编码特殊字符,但这是因为要通过HTML解析器来提供内容。解析器完成后,DOM中存在的文本节点不会显示这些HTML实体的痕迹:解析器会按照您在HTML源代码中表达的愿望来解析它们,创建字符字符串并创建纯文本节点。 >