这是我的情况:
寻求帮助:
1)我认为我需要使用jQuery“prepend / prependTo”“doctype”到
html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"
没有!doctype,它会将ie8抛入quirksmode,当然不接受任何样式,例如“input [type = checkbox]”
我之前没有使用过prepend。您能否帮助我提供有关如何进行以下操作的完整而正确的语法:
CURRENT:<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
希望:<doctype html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
这对我来说还没有用$("html ").prepend("doctype ")
答案 0 :(得分:24)
不是<doctype html>
。它是:
<!DOCTYPE html>
<html (xmlns or any other attributes you want)>
<!DOCTYPE
不是元素。它在开头有<!
,对于元素无效。这是“doctype 声明”,初始解析后无法进行有效修改。
即使在DOM接口允许您移动/替换表示doctype声明的DocumentType
节点的浏览器上,这也不具有在Quirks和Standards模式之间切换的效果,这是仅由决定的在初始加载时。你不能在模式之间改变文档。
您可以从现有文档加载新文档,但更改模式:
<!-- no doctype, loads in Quirks Mode (BackCompat) -->
<html>
<!-- rest of the document, then at the end: -->
<script>
alert('now in compatMode '+document.compatMode);
if (document.compatMode==='BackCompat') {
setTimeout(function() {
var markup= document.documentElement.innerHTML;
markup= '<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">'+markup+'</html>';
document.open();
document.write(markup);
document.close();
}, 0);
}
</script>
</html>
但我强烈建议反对它。这很难看,会在加载时间结束时重置任何状态并重绘,并且会对脚本产生各种负面影响。
如果您需要标准模式,您确实需要将doctype添加到HTML本身。如果您绝对无法触摸该应用程序,那么如何使用ISAPI筛选器(假设您的Web服务器是IIS)将doctype添加到其HTML输出中?