【发布时间】:2013-05-26 10:26:59
【问题描述】:
我一直在阅读 DOM 文档,似乎在新标准中,CDATA 部分的节点类型现在消失了。
似乎mozilla 摆脱了CDATA_SECTION_NODE,因为它现在已被弃用。在DOM 文档中
现在它说它的历史。我的问题是:如果现在函数 nodeType 没有检测到 CDATA_SECTION_NODE DOM 是如何处理这些标签的?那就是如果我要写
<script><![CDATA[ /*Some code with < & and what not */ ]]></script>
那么如果没有节点来处理 CDATA 部分,浏览器将如何处理呢?它只是读取内容并忽略<!CDATA[ 和]]> 字符串吗?
此外,有什么地方可以解释摆脱它的决定吗?
【问题讨论】:
-
自己试试吧。创建一个元素,向其添加 CDATA 内容,并遍历其子元素,检查节点类型和值
-
@Ian:我已经在 Firefox 中测试过,似乎
<! >中的所有内容在查看 HTML 文件时都被视为“虚假”注释。但令人惊讶的是,如果我将 cdata 部分放在 xml 文档中,那么在检查元素时,我发现它检测到了 cdata-section 节点。我不太确定在读取包含该节点的 xml 文件时 javascript 会说什么。感谢您的建议。 -
CDATA 是特定于 SGML 和 XML 的,它在 HTML 中是无效的,而且从来都不是,所以它作为“虚假”评论出现是正确和预期的行为,因为“正确”评论有
<!--和-->。但是,我仍然对到底发生了什么变化感到困惑。例如,如果新的 DOM4 中没有 CDATA,但 XML 中仍然存在 CDATA 标签,那么一旦 Mozilla 淘汰并移除 DOM 支持,我们将如何处理数据? IE。寻找 NodeFilter.SHOW_CDATA_SECTION 的 tree walker 会失败吗?那么我们如何找到它们呢?它现在才有效,因为它还没有过时/删除。 -
我假设 CDATA 被视为与任何其他文本节点(或文本节点的一部分)一样
-
我在浏览器中从本地文件系统打开了一些
<outertag><tags><innertag><!CDATA[<p>some HTML etc</p>]]></innertag></tags>[more <tags> here]</outertag>形式的 XML。在浏览器控制台 (CTRL-k) 中:JS DOMdocument.createTreeWalker( document, NodeFilter.SHOW_TEXT, null );然后这个<tags>.textContent显示 HTML。或者这个<tags>.childNode[0].nodeValue有HTML。但是如果childNode[0]是CDATASection节点,那么在DOM4 中究竟删除了什么?我以为 CDATASection 节点会被删除? FF 49 还没有使用 DOM4 吗?还是尚未删除?什么时候下架?
标签: javascript html xml dom w3c