规范是否要求设置节点的innerText / textContent才能自动转义HTML实体?

问题描述 投票:0回答:1

我正在尝试显示一个代码段,该代码段可能采用类似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上进行了测试,但是不确定textContentinnerText的自动转义在其他主流浏览器中是否具有良好的支持。相关的DOMHTML API规范对此似乎有点含糊。

那么规范是否要求这种行为,因此是一种安全的转义字符串方法?

javascript html dom
1个回答
0
投票

了解它们之间的区别很重要:

  • 将HTML源文件馈送到浏览器中的HTML解析器,以便根据您的意愿构造(和呈现)DOM,并且
  • 使用JavaScript操作现有 DOM 之后构造了DOM]

当您设置existing DOM节点的textContent时,您使用的是浏览器提供的API,该API将采用您提供的任何文本,并使用给定的字符串创建一个类型为text的新DOM节点。字符作为其内容。当您这样做时,HTML根本不相关:不使用HTML解析器。因此,HTML实体表示法不是必需的,实际上,如果您尝试使用它,最终将得到包含文字HTML实体表示法的文本节点。

当然,在HTML源代码中,您必须使用HTML实体符号来编码特殊字符,但这是因为要通过HTML解析器来提供内容。解析器完成后,DOM中存在的文本节点不会显示这些HTML实体的痕迹:解析器会按照您在HTML源代码中表达的愿望来解析它们,创建字符字符串并创建纯文本节点。 >

© www.soinside.com 2019 - 2024. All rights reserved.