Javascript 如何让Firefox将XML名称空间附加到html元素?
我正在客户端创建XHTML文档,如下所示:Javascript 如何让Firefox将XML名称空间附加到html元素?,javascript,dom,cross-browser,xhtml,Javascript,Dom,Cross Browser,Xhtml,我正在客户端创建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.createDocum
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元素如下所示:
,但是在Firefox中运行相同的代码时,html元素没有xmlns属性:
。Firefox文档似乎也被视为HTML,做着诸如不关闭标签之类的事情
下面是一个JSFIDLE示例,您可以在Chrome或Firefox中查看该示例以了解差异:
在我的特定用例中,我需要xmlns属性和Firefox将文档视为XHTML,以便文档有效并正确显示。通过修改创建文档的方式或提取内容的方式,如何在此处获得一致性?您可以直接设置属性吗?在Firefox中,它似乎可以正常工作
myDocument.documentElement.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml')
Firefox将该文档视为XMLDocument,而不是HTML文档。您可以这样说,因为如果您得到一个元素的标记名
,如果它是一个HTML文档,则标记名将是大写的,即使您以小写形式指定createElement()
。这不会发生在XMLDocument中
与…相对
由于outerHTML
的实现,您没有看到xmlns属性。对于XML文档,根据,这应该将DOM序列化为XML,但Firefox似乎没有这样做
您可以使用新的XMLSerializer().serializeToString(myDocument.documentElement)相反,在Firefox中获取XML序列化。看
顺便说一句,我强烈建议您始终对XMLDocuments使用
createElements()
,而不要使用createElement()
。在DOM3中,createElement()
将把元素放在空名称空间中,而DOM4规范目前说它将放在http://www.w3.org/1999/xhtml
namespace,尽管更改仍然是一个争论不休的问题。对不起,我需要编辑我的问题以进行澄清。这确实设置了属性,但Firefox仍然没有将文档视为XHTML(例如,没有关闭meta标记)。我已经有一段时间没有处理xhtml了!