javascript - DOCTYPE 的选择是否会影响 javascript 代码所见的 DOM?

标签 javascript dom doctype

鉴于使用 ASP.NET、javascript、css 等技术的大型遗留项目,我想知道是否更改网页的 DOCTYPE,例如,从 HTML 4.0 Transitional 到 XHTML 1.0 Transitional(或相反)任何方式都可能破坏网页的 javascript 功能。

关于不同的 DOCTYPES 如何影响页面的 (css) 呈现,有很多文章和讨论,但我似乎找不到任何关于破坏任何代码的类似内容。

我正在查找有关一般注意事项的文章链接,以便更好地发现现有代码中的潜在问题并避免在编写新代码时产生问题。

最佳答案

更改 DOCTYPE 是否会破坏任何 javascript 函数实际上取决于这些函数的设计防御性:)

例如,当文档以quirks 模式 呈现时,document.body (BODY) 成为所谓的“根元素”;当以标准模式呈现时,该根元素通常是 document.documentElement (HTML)。这是一个相当实质性的区别。如果确定浏览器屏幕大小的脚本总是查询 document.documentElementclientWidth/clientHeight 属性,它显然会在 quirks 模式下报告不正确的结果(因为 IIRC,document.documentElement.clientWidth/clientHeight 将代表 HTML 元素的尺寸,而不是屏幕元素)。

大多数 JS 库通常明确声明是否支持 quirksmode(我们 - Prototype.js - 例如,不支持 quirks 模式)。

谈到 HTML 与 XHTML,为了让浏览器将文档呈现为 XHTML,您必须首先为其提供适当的“Content-type” header (即 application/xhtml+xml)。如果您只将 doctype 更改为 XHTML,但仍将文档作为“text/html”提供,我知道的大多数浏览器仍会将其解析(并呈现)为 HTML 文档

请注意,到目前为止,IE 不理解“真正的”XHTML 内容,这就是为什么将文档作为 text/html(使用 HTML4.01 文档类型)提供服务是推荐的方式(除非 IE 不在受支持的浏览器中,当然)。

就“真正的”XHTML 文档中的 DOM 特性而言,我听说像 document.write 这样的东西“不起作用”并且访问节点属性应该始终通过 getAttribute/setAttribute(而不是通过更简单的属性访问器)。 IIRC,innerHTML 也存在一些问题。

在“真正的”XHTML 文档中缺少有关 DOM 的信息可能是由于它在文档/通用 Web 应用程序中不切实际(即 IE 不支持它)。

关于javascript - DOCTYPE 的选择是否会影响 javascript 代码所见的 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1403887/

相关文章:

html - 有什么理由不开始使用 HTML 5 文档类型?

Javascript 验证 w3c

javascript - 将 DOCTYPE 添加到从提取的 div 内容生成的下载文件中

javascript - 如何为 <img> 标签使用模糊事件

javascript - 状态转换后可以注册点击监听器吗?

javascript - 使用 Javascript 标记 JSON 数据

javascript - ui-select 选择在 angularjs 中不起作用

jquery - 禁用基于其他下拉选择的下拉选择 - 即使选择 = "selected"

javascript - 我有几千个 javascript 对象,我需要显示和滚动它们。我有什么选择?

javascript 未检测到链接的点击