Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让Firefox将XML名称空间附加到html元素?_Javascript_Dom_Cross Browser_Xhtml - Fatal编程技术网

Javascript 如何让Firefox将XML名称空间附加到html元素?

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

我正在客户端创建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元素如下所示:
,但是在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)

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

对不起,我需要编辑我的问题以进行澄清。这确实设置了属性,但Firefox仍然没有将文档视为XHTML(例如,没有关闭meta标记)。我已经有一段时间没有处理xhtml了!