【问题标题】:How can I get Firefox to attach an XML namespace to my html element?如何让 Firefox 将 XML 命名空间附加到我的 html 元素?
【发布时间】:2015-08-04 08:39:32
【问题描述】:

我正在客户端创建 XHTML 文档,如下所示:

var xhtmlDocType = document.implementation.createDocumentType(
  'html',
  '-//W3C//DTD XHTML 1.0 Transitional//EN',
  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'
);
myDocument = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', xhtmlDocType);

在 Chrome 中运行此代码时,输​​出 (myDocument.documentElement.outerHTML) 与我预期的一样,生成的 html 元素如下所示:<html xmlns="http://www.w3.org/1999/xhtml">,但是在 Firefox 中运行相同代码时,html 元素没有 xmlns属性:<html>。 Firefox 文档似乎也被视为 HTML,执行诸如不关闭 <meta> 标记之类的操作。

这里有一个 JSFiddle 提供一个示例,可以在 Chrome 或 Firefox 中查看以查看区别:http://jsfiddle.net/70avhuo3/5/

在我的特定用例中,我需要 xmlns 属性和 Firefox 将文档视为 XHTML,以便文档有效并正确显示。如何在这里获得一致性,无论是通过修改我创建文档的方式,还是我提取内容的方式?

【问题讨论】:

    标签: javascript dom cross-browser xhtml


    【解决方案1】:

    Firefox 将文档视为 XMLDocument,而不是 HTML 文档。你可以这样说,因为如果你得到一个元素的tagName,如果它是一个HTML文档,那么即使你指定createElement()是小写,tagName也是大写的。这不会发生在 XMLDocument 中。

    参见 http://jsfiddle.net/70avhuo3/6/ 而不是 http://jsfiddle.net/70avhuo3/7/

    由于outerHTML 的实现,您没有看到 xmlns 属性。对于 XML 文档,根据DOM serialization and parsing draft spec,这应该将 DOM 序列化为 XML,但似乎 Firefox 不这样做。

    您可以改用new XMLSerializer().serializeToString(myDocument.documentElement); 在 Firefox 中获取 XML 序列化。见http://jsfiddle.net/70avhuo3/8/


    顺便说一句,我强烈建议您始终将createElementNS() 与XMLDocuments 一起使用,而不是createElement()。在 DOM3 中,createElement() 会将元素放在 null 命名空间中,而 DOM4 规范目前表示它将进入 http://www.w3.org/1999/xhtml 命名空间,尽管这一变化仍然是一个争论不休的问题。

    【讨论】:

      【解决方案2】:

      可以直接设置属性吗?它似乎在 Firefox 中按预期工作。

      myDocument.documentElement.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml')
      

      【讨论】:

      • 抱歉,我需要编辑我的问题以便澄清。这确实设置了属性,但 Firefox 仍然不会将文档视为 XHTML(例如,不关闭元标记)。
      • 我确实想知道这是否是肤浅的。我有一段时间不用处理 xhtml 了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多