提问人:David Smith 提问时间:8/4/2015 最后编辑:David Smith 更新时间:8/4/2015 访问量:215
如何让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 中运行此代码时,输出 () 如我所料,生成的 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,以便文档既有效又正确显示。如何通过修改文档创建方式或提取内容的方式来获得此处的一致性?
答:
可以直接设置属性吗?它似乎在Firefox中按预期工作。
myDocument.documentElement.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml')
评论
Firefox 将该文档视为 XMLDocument,而不是 HTML 文档。你可以知道这一点,因为如果你得到一个元素的,如果它是一个 HTML 文档,tagName 将大写,即使你以小写形式指定。这在 XMLDocument 中不会发生。tagName
createElement()
请参阅 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
评论