Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 规范是否要求设置节点的innerText/textContent自动转义HTML实体?_Javascript_Html_Dom - Fatal编程技术网

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

Javascript 规范是否要求设置节点的innerText/textContent自动转义HTML实体?,javascript,html,dom,Javascript,Html,Dom,我试图显示一个代码片段,可以是类似HTML/XML的语言。为了转义HTML实体,我碰巧发现以下代码正在工作: //js代码 document.querySelector(“#foo”).textContent=”a段落”; innerText也可以工作,但是innerHTML不能工作,这是意料之中的 我已经用最新的Chrome和Firefox对它进行了测试,但我不确定textContent和innerText的自动转义是否在其他主流浏览器中得到了很好的支持。相关的API规范在这方面似乎有

我试图显示一个代码片段,可以是类似HTML/XML的语言。为了转义HTML实体,我碰巧发现以下代码正在工作:


//js代码
document.querySelector(“#foo”).textContent=”a段落

”;
innerText
也可以工作,但是
innerHTML
不能工作,这是意料之中的

我已经用最新的Chrome和Firefox对它进行了测试,但我不确定
textContent
innerText
的自动转义是否在其他主流浏览器中得到了很好的支持。相关的API规范在这方面似乎有点模糊


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

了解以下两者之间的区别很重要:

  • 将HTML源文件提供给浏览器中的HTML解析器,以便根据您的意愿构造(和呈现)DOM,以及
  • 在构建DOM后使用JavaScript操作现有DOM
当您设置现有DOM节点的
textContent
时,您正在使用浏览器提供的API,该API将接受您提供的任何文本,并使用给定的字符串作为其内容创建一个类型为
text
的新DOM节点。当您这样做时,HTML根本不相关:HTML解析器不会被查询。因此,HTML实体表示法是不必要的,事实上,如果您尝试使用它,您将得到包含文本HTML实体表示法的文本节点


当然,在HTML源代码中,您必须使用HTML实体表示法对特殊字符进行编码,但这是因为您通过HTML解析器提供内容。一旦解析器完成,DOM中存在的文本节点就不会显示这些HTML实体的痕迹:解析器根据您在HTML源代码中表达的愿望解释它们,创建字符串,并创建纯文本节点。

当您使用
innerHTML
时,不会显示HTML标记,相反,它们实际上是被解析的。。。例如,
bar
将生成bar,而不是“
bar
”DOM规范对我来说非常清楚:文本作为DOM中新文本节点的值安装。这意味着不执行HTML解释。HTML特殊字符不需要转义;这只有在他们需要通过HTML解析器时才有必要,这在您设置
textContent
@Pointy时不会发生,谢谢您的快速响应。但是,我无法真正找到句子
,该文本作为规范中DOM中新文本节点的值安装。但不管怎样,(可能是因为我对HTML术语不够熟悉),甚至这句话对我来说对于HTML实体也显得相当模糊。DOM中的文本节点就是:一个带有字符串的节点。一旦达到这个级别,HTML就不再相关:任何字符都可以是该字符串的一部分。HTML源代码中需要HTML实体,因为HTML解析器将解析和解释代码。使用JavaScript创建文本节点时不会发生这种情况。@Pointy我想我明白了。你介意把你的评论总结成一个答案吗?这样我就可以接受了?