我该如何更改DOCTYPE

时间:2010-06-30 08:55:16

标签: javascript html doctype

此处的任何人都知道如何使用javascript动态更改doctype?

我尝试过这个功能,

document.doctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'); ,

但它不起作用。

6 个答案:

答案 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)

我认为你不能。 doctypelisted作为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