在DOM4中不推荐使用CDATA Section节点

时间:2013-05-30 18:05:13

标签: javascript html xml dom w3c

我一直在读DOM文档,似乎在新标准中,CDATA部分的节点类型现在已经消失了。

似乎mozilla已删除CDATA_SECTION_NODE,因为它现已弃用。在DOM文档中 现在它说它的历史。我的问题是:如果现在函数nodeType没有检测到CDATA_SECTION_NODE DOM如何处理这些标记?那就是我写的

<script><![CDATA[ /*Some code with < & and what not */ ]]></script>

那么如果没有节点来处理CDATA部分,浏览器将如何处理?它是否只是阅读内容而忽略了<!CDATA[]]>字符串?

此外,是否有任何地方可以解释摆脱它的决定?

1 个答案:

答案 0 :(得分:0)

CDATA处理有几个不同的组件:

  1. CDATA是否是DOM中的一个独特节点类型(CDATASection Node.CDATA_SECTION_NODE nodeType接口,或者它是否只是一个文本节点。
  2. (HTML或XML)解析器如何处理包含<!CDATA[ ... ]]>的标记 - 它如何处理CDATA中的特殊字符(<>&),它是否为CDATA部分发出单个节点,如果是这样,它会在DOM中创建Text节点或CDATASection节点。
  3. 如何序列化CDATA部分(包裹在<![CDATA[ ]]>中或使用特殊字符转义)
  4. 据我所知,#5 HTML5解析器规范是在大多数浏览器中实现的,根据它,解析器永远不会发出CDATASection节点,具体取决于上下文

    • 要么将CDATA的内容解析为&#34;原始文本&#34; (对特殊字符的处理不同) - 例如在<script><math>
    • 或将CDATA视为&#34;虚假评论&#34;,which ends at the first >

    关于如何以及是否应该在DOM中公开CDATA的问题尚未达成一致,尽管已从DOM4规范中删除,但它至少仍可用于Gecko(参见Mozilla bug 660660,W3C错误{{3 }和12841)。

    • 一方面,从使用DOM的应用程序的角度来看,CDATA节点与文本节点没有太大区别 - 唯一的区别是它们在标记中的序列化。因此,如果CDATA作为单独的节点类型公开,那么每个人都需要记住在他们想要检查文本节点时检查它。
    • 另一方面,由于CDATA会扰乱创作工具的开发人员和用户,因此无法序列化文档的某些部分,因为它会强制序列化始终对XML / HTML特有的字符进行编码。