需要帮助:jquery prepend doctype to html

时间:2010-12-20 20:52:53

标签: jquery html doctype prepend

这是我的情况:

  1. 我正在编辑应用程序的CSS样式表。
  2. 我只能编辑CSS样式表(除非我可以使用CSS创造性地浏览另一个文件,或者可能在现有的.js中添加一个小的jQuery prepend语句)
  3. 仅适用于ie6,ie7和ie8。他们从不使用FireFox,也不是一种选择。
  4. 寻求帮助:

    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 ")

1 个答案:

答案 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输出中?