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

Joe*_*ech 5 javascript doctype dom

鉴于使用ASP.NET,javascript,css等技术的大型遗留项目,我想知道是否以任何方式将网页的DOCTYPE从HTML 4.0 Transitional更改为XHTML 1.0 Transitional(或其他方式)可以打破网页的javascript功能.

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

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

kan*_*gax 6

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

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

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

说到HTML与XHTML,为了让浏览器将文档呈现为XHTML,首先必须使用适当的"Content-type"标题(即application/xhtml + xml)来提供它.如果您只将doctype更改为XHTML,但仍然将文档作为"text/html"提供,我知道的大多数浏览器仍会将其解析(并呈现)为HTML文档.

请注意,到目前为止,IE还不了解"真正的"XHTML内容,这就是为什么以文本/ html(HTML4.01 doctype)提供文档是一种推荐的方式(当然,除非IE不在支持的浏览器中) .

至于"真正的"XHTML文档中的DOM特性,我听说过一些诸如document.write"不工作"之类的东西,并且应该始终通过getAttribute/setAttribute(而不是通过更简单的属性访问器)来访问节点属性.IIRC,也存在一些问题innerHTML.

"真正的"XHTML文档中缺乏关于DOM的信息可能是由于它在一般网络的文档/应用程序中的不切实际(即IE缺乏对它的支持).