如何让 Firefox 将 XML 命名空间附加到我的 html 元素?
How can I get Firefox to attach an XML namespace to my html element?
我正在创建 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,以便文档既有效又能正确显示。如何通过修改创建文档的方式或提取内容的方式来获得一致性?
可以直接设置属性吗?它似乎 在 Firefox 中按预期工作。
myDocument.documentElement.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml')
Firefox 将文档视为 XML 文档,而不是 HTML 文档。你可以这么说,因为如果你得到一个元素的 tagName
,如果它是一个 HTML 文档,即使你指定 createElement()
为小写,tagName 也会是大写。 XML文档中不会发生这种情况。
见http://jsfiddle.net/70avhuo3/6/ as opposed to 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()
与 XML 文档一起使用,而不要 createElement()
。在 DOM3 中,createElement()
会将元素放入 null 命名空间,而 DOM4 规范目前表示它将进入 http://www.w3.org/1999/xhtml
命名空间,尽管更改仍然是积极辩论的问题。