【问题标题】:How can I read a HTML comment located outside of <html> using JavaScript?如何使用 JavaScript 读取位于 <html> 之外的 HTML 注释?
【发布时间】:2009-09-22 01:49:02
【问题描述】:

我需要阅读 DOM 根节点之外的 HTML 注释:

<html>
   ... other stuff
</html>
<!-- The comment I want to read -->

我可以用 JavaScript 以某种方式做到这一点吗?

【问题讨论】:

  • 它们实际上是 HTML cmets

标签: javascript html dom


【解决方案1】:

我对此做了一些测试,发现除了 &lt;/html&gt; 之外的任何 HTML 都会在解析期间附加到 &lt;body&gt; 中。因此,在我测试的所有浏览器(IE6/7、FF3、Opera10、Chrome2)中,评论都可以通过 document.body.lastChild 访问,并且可以通过 document.body.lastChild.data 检索其内容>.

【讨论】:

  • 出色的工作!实际上,我的文件末尾有一个空行,因此 document.body.lastChild.data 是“\n”,但是通过查看萤火虫,我发现注释作为正文的子节点存在。谢谢!
  • 这不是通用解决方案。
  • 很好 - 将这种技术与 document.firstChild 一起用于 cmets之前 任何其他内容。
【解决方案2】:

#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) 规范中找不到任何允许解析器丢弃整个注释节点的内容 - 只有它们的文本内容。

【讨论】:

  • 该标准允许多个 cmets,但大多数 XML/HTML 解析器不将它们放入 DOM。这不是错误,因为标准不要求他们这样做。
  • 那些 cmets 主要用于解析器 ... doctype 等?
  • 文档类型不是注释(并且使用不同的语法)。评论纯粹是为了人类,但应该在解析过程中保留,imo。
【解决方案3】:

有一个 jQuery 插件可以解决这个问题: http://www.bennadel.com/index.cfm?dax=blog:1563.view

好像

objChildNode.nodeType === 8

是重点!

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 2013-09-23
    • 1970-01-01
    • 2012-03-17
    • 2016-04-12
    • 2017-01-18
    • 2015-06-30
    • 2016-06-03
    • 2016-03-10
    相关资源
    最近更新 更多