【问题标题】:Need help with: jquery prepend doctype to html需要帮助:jquery prepend doctype to html
【发布时间】:2010-12-20 20:52:52
【问题描述】:

这是我的情况:

  1. 我正在编辑应用程序的 CSS 样式表。
  2. 我只能编辑 CSS 样式表(除非我可以创造性地使用 CSS 转到另一个文件,或者可能在现有的 .js 中添加一个小的 jQuery 前置语句)
  3. 应用程序仅兼容 ie6、ie7 和 ie8。他们从不使用 FireFox,这不是一种选择。

寻求帮助:

1) 我想我需要使用 jQuery 来“prepend/prependTo”一个“doctype”到

html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"

如果没有 !doctype,它会将 ie8 抛出 quirksmode,当然不接受任何样式,例如“input[type=checkbox]”

我以前没有使用过前置。你能帮我用完整和正确的语法来说明如何进行以下操作吗:

当前:<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 ")

【问题讨论】:

  • 这个真的需要在页面发送到客户端时修复,而不是在JavaScript中
  • 我确实理解这一点的重要性,但目前这是不可能的。该应用程序显然已经像这样运行了 7 年,他们没有预算来修复或触摸某些东西。很不幸我知道。因此,如果有我们可以修补的修复程序,我将非常感谢您提供一点帮助。
  • IE 在运行时已经处于 quirksmode...在事实发生后添加 DOCTYPE 不会扭转这种情况。此外,如果它确实有效,你会破坏多少种样式? :)

标签: jquery html doctype prepend


【解决方案1】:

不是<doctype html>。它是:

<!DOCTYPE html>
<html (xmlns or any other attributes you want)>

&lt;!DOCTYPE 不是元素。它的开头有&lt;!,这对于元素是无效的。这是“doctype declaration”,在初始解析后无法更改。

即使在其 DOM 接口允许您移动/替换代表 doctype 声明的 DocumentType 节点的浏览器上,这也不会产生在 Quirks 和 Standards 模式之间进行更改的效果,这只是决定 em> 在初始加载时。您不能在模式之间改变文档。

可以从现有文档中加载新文档,但模式已更改:

<!-- 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>

但我强烈建议不要这样做。它很丑陋,会在加载时间结束时重置任何状态并重绘,并且会对脚本产生各种负面影响。

如果您想要标准模式,您确实需要将文档类型添加到 HTML 本身。如果您绝对不能接触应用程序,那么使用 ISAPI 过滤器(假设您的 Web 服务器是 IIS)将 doctype 添加到其 HTML 输出中怎么样?

【讨论】:

  • 非常清晰简洁的信息。您的回答内容丰富,易于阅读和理解。您是 StackOverflow 的宝贵成员。我正在与公司合作将 !DOCTYPE 添加到声明中。它已经在没有它的情况下运行了 7 年多。希望它可以实施。我不会添加创意脚本来添加 DOCTYPE。将数据馈送到页面等时,这将是非常危险的。它需要刷新页面,谁知道会造成什么样的破坏。再次:谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多