此处的任何人都知道如何使用javascript动态更改doctype?
我尝试过这个功能,
document.doctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'); ,
但它不起作用。
答案 0 :(得分:11)
我希望这个可以帮助你们(在控制台中测试并改变实际的DOCTYPE)
var newDoctype = document.implementation.createDocumentType(
'html',
'-//W3C//DTD XHTML 1.0 Transitional//EN',
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdd'
);
document.doctype.parentNode.replaceChild(newDoctype,document.doctype);
答案 1 :(得分:3)
document.doctype is a read-only
属性,而非方法,显然是根据MDC。
您需要的是:
https://developer.mozilla.org/En/DOM/DOMImplementation.createDocumentType
返回一个DocumentType对象,可以在创建文档时与DOMImplementation.createDocument一起使用,也可以通过Node.insertBefore()或Node.replaceChild()将它们放入文档中:
答案 2 :(得分:3)
为了证明这个用例的合理性,我有以下场景:
我有一个TAL模板,可以呈现页面的一个小门户。然后我将该portition包装在父标签中,如下所示:
<html tal:omit-tag="True" ...>
<body tal:omit-tag="True">
<div class="wrapper" tal:omit-tag="True">
..
<div id="mydiv" tal:content="foo()">Example content.</div>
..
</div>
</body>
</html>
这样,设计人员可以将此TAL模板作为独立的HTML文件进行查看/编辑。但是,不能在TAL中省略DTD,所以不能在那里添加它。
使用JavaScript添加它的简单方法是这样的:
if (!document.doctype) {
document.write('<!doctype HTML>\n' + \
document.head.outerHTML + \
document.body.outerHTML);
}
答案 3 :(得分:1)
我认为你不能。 doctype
是listed作为W3C文档中的属性,但它是只读的。即使不是,我也无法想象它会改变现实浏览器的效果。
重新发表您的后续评论:您必须处理此服务器端并提供针对目标浏览器定制的页面。但除了一些非常边缘的情况之外,你不应该做任何事情。
答案 4 :(得分:0)
即使你可以,你的代码也会在页面已经决定渲染之后执行,在哪种情况下,更改doctype的效果都不算什么。我可以想象现代浏览器有文档类型问题的唯一方法是你依赖于IE中的怪癖模式 - 修复你的设计以适用于除IE之外的所有浏览器,然后看看IE特定的样式。
答案 5 :(得分:0)
如果问题只出现在IE上,由于我也遇到了同样的问题,我使用了针对IE的怪癖模式 - 只需在DOC TYPE声明之前使用注释,IE就会进入怪癖模式。
您可以解决的另一种方法是首先加载脚本以检测浏览器,然后使用browsers参数重定向到您可以声明依赖于浏览器的doctype的其他页面。
我用我的代码完成的例子如下: -
<!--[if lt IE 9]>
<![endif]-->
<![if gte IE 9]>
<!DOCTYPE html>
<![endif]>
这里我从browe
中删除了doctype declearation