如何让Firefox将XML命名空间附加到我的html元素?

How can I get Firefox to attach an XML namespace to my html element?

提问人:David Smith 提问时间:8/4/2015 最后编辑:David Smith 更新时间:8/4/2015 访问量:215

问:

我正在客户端创建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 中运行此代码时,输出 () 如我所料,生成的 html 元素如下所示: ,但是在 Firefox 中运行相同的代码时,html 元素没有 xmlns 属性:。Firefox文档似乎也被视为HTML,执行诸如不关闭标签之类的操作。myDocument.documentElement.outerHTML<html xmlns="http://www.w3.org/1999/xhtml"><html><meta>

下面是一个 JSFiddle 示例,可以在 Chrome 或 Firefox 中查看以查看差异: http://jsfiddle.net/70avhuo3/5/

在我的特定用例中,我需要 xmlns 属性和 Firefox 将文档视为 XHTML,以便文档既有效又正确显示。如何通过修改文档创建方式或提取内容的方式来获得此处的一致性?

JavaScript DOM 跨浏览器 XHTML

评论


答:

1赞 joews 8/4/2015 #1

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

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

评论

1赞 David Smith 8/4/2015
对不起,我需要编辑我的问题以进行澄清。这确实设置了属性,但 Firefox 仍然没有将文档视为 XHTML(例如,不关闭 meta 标签)。
0赞 joews 8/4/2015
我确实想知道这是否是肤浅的。我已经有一段时间没有处理xhtml了!
2赞 Alohci 8/4/2015 #2

Firefox 将该文档视为 XMLDocument,而不是 HTML 文档。你可以知道这一点,因为如果你得到一个元素的,如果它是一个 HTML 文档,tagName 将大写,即使你以小写形式指定。这在 XMLDocument 中不会发生。tagNamecreateElement()

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

由于实现了 ,您看不到 xmlns 属性。对于XML文档,根据DOM序列化和解析草案规范,这应该将DOM序列化为XML,但Firefox似乎没有这样做。outerHTML

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


顺便说一句,我强烈建议您始终使用 XMLDocuments,而不是 .在 DOM3 中,该元素将放在 null 命名空间中,而 DOM4 规范目前说它将放在命名空间中,尽管该更改仍然是一个有争议的问题。createElementNS()createElement()createElement()http://www.w3.org/1999/xhtml