【发布时间】:2009-09-22 01:49:02
【问题描述】:
我需要阅读 DOM 根节点之外的 HTML 注释:
<html>
... other stuff
</html>
<!-- The comment I want to read -->
我可以用 JavaScript 以某种方式做到这一点吗?
【问题讨论】:
-
它们实际上是 HTML cmets
标签: javascript html dom
我需要阅读 DOM 根节点之外的 HTML 注释:
<html>
... other stuff
</html>
<!-- The comment I want to read -->
我可以用 JavaScript 以某种方式做到这一点吗?
【问题讨论】:
标签: javascript html dom
我对此做了一些测试,发现除了 </html> 之外的任何 HTML 都会在解析期间附加到 <body> 中。因此,在我测试的所有浏览器(IE6/7、FF3、Opera10、Chrome2)中,评论都可以通过 document.body.lastChild 访问,并且可以通过 document.body.lastChild.data 检索其内容>.
【讨论】:
document.firstChild 一起用于 cmets之前 任何其他内容。
#document 节点(DOM 文档的逻辑根)的 DOM 标准只允许一个元素节点(即一个 ),但允许多个注释节点(以及其他更深奥的节点类型)。因此,我们应该期待
document.lastChild
在此实例中成为您想要的评论节点。奇怪的是,这不起作用(至少在 Safari 4 中)。
在我的测试中,在 HTML 节点之前放置一个注释节点是可以的。在本例中,document.childNodes.length 为 2,document.firstChild 为注释。在 HTML 节点之后添加注释似乎插入 DOM 中的错误位置 - document.childNodes.length 保持为 1,并且 DOM 检查器中的节点被视为 BODY 节点的最后一个子节点。但是,我根本找不到使用 DOM API 的那个节点!
这似乎是(至少)在 DOM 的 Safari 实现中的一个奇怪之处。使用 Firefox 进行的快速测试表明,如果它是文档中的第一个条目,它甚至找不到评论节点!
编辑:好的,根据 Aaron 的评论和更多思考,页面的解析器很可能只是在解析过程中丢弃了节点。我不再确定这是一个错误,但我在 (XML) 规范中找不到任何允许解析器丢弃整个注释节点的内容 - 只有它们的文本内容。
【讨论】:
有一个 jQuery 插件可以解决这个问题: http://www.bennadel.com/index.cfm?dax=blog:1563.view
好像
objChildNode.nodeType === 8
是重点!
【讨论】: