我是一名C / C ++程序员,目前我正在使用一些Javascript代码,而且我在查找浏览器中可用的标准Javascript库的文档时遇到了问题。
具体来说,我在使用onload
创建的HTMLImageElement
上设置new Image()
回调函数。我还想阅读src
属性,因为它具有非标准行为 - 当分配此属性时,将重新加载图像。
Mozilla在这里提供了各种属性的骨架文档:https://developer.mozilla.org/en/DOM/Image
这里没有文档,只有属性列表。未提及onload
属性。列出了src
属性,但没有相关文档。
MSDN有更好的文档:http://msdn.microsoft.com/en-us/library/cc197055(VS.85).aspx。
我的问题是'标准文档在哪里'? Image()
是全局变量,还是window
全局对象的属性?谁为window
和document
撰写了API?是否有标准,或者每个浏览器是否只是相互复制?
答案 0 :(得分:39)
DOM实际上是JavaScript的一个单独的东西。可以从其他语言访问DOM,例如IE中的VBScript。而Java,Python,PHP等通用编程语言也有自己的非基于浏览器的DOM库。
可以在DOM Core中找到适用于HTML和常规XML文档的基本DOM操作; HTML文档获得DOM HTML中定义的额外方法。这些是W3定义的最新“支持级别”;并非所有浏览器都支持DOM Level 3 Core中的所有内容。但是DOM Level 1 Core非常可靠。
令人困惑的是,DOM HTML已经进一步发展,但不是在自己的DOM规范中。相反,它是HTML5的一部分。这标准化了很多已经在浏览器中广泛支持的扩展,例如innerHTML
,并添加了一些尚未广泛实现的东西(并且可能在文档标准化之前进行更改)。
DOM只是文档对象模型:它指定了document
对象中的内容。它没有指定其他浏览器功能,例如window
的内容。浏览器对象模型(BOM)以前是非标准化的; HTML5正在努力正确地记录它。
HTML5还指定了先前未标准化的浏览器对象模型(BOM)部分。类似window
的内容与document
内容没有直接关联。
所有这一切的结果是,没有一个文档可以告诉您有关Web脚本中可用的方法和属性的所有内容。有一天DOM Core加上HTML5将涵盖所有这些,但今天HTML5包含了许多你不能依赖的内容,并且即使按标准文档标准也不是最易读的指南。所以,是的,我担心你将不得不继续检查MDC和MSDN以获得支持。
HTML5将{p>'Image'是全局变量,还是全局对象'window'的属性?
Image
指定为window
对象的成员,作为全局上下文,它允许您将其称为Image
...这不是完全与全局变量完全相同,但它对大多数人而言足够接近。
它是一个构造函数,它返回一个实现HTMLImageElement
接口的DOM对象(来自DOM Level 1 HTML,在HTML5中扩展)。它最初是作为预加载图像的机制在Netscape 3.0中引入的;可以从document.images
访问已创建的图片以更改其src
。今天new Image()
与document.createElement('img')
没有任何不同。
我还想阅读'src'属性,因为它具有非标准行为 - 当分配此属性时,将重新加载图像。
图像不会被重新加载,但可能导致某些浏览器触发load
事件。不幸的是,这不是标准化的(据我所见,甚至在HTML5中也是如此)。 IE,Firefox和Opera在每个load
集合上激活src
(即使src
未更改),而WebKit(Chrome / Safari)仅在初始图像加载时触发它。 / p>
这就是为什么有些网站有不同浏览器行为的大表,以及为什么我们仍然需要在不同浏览器上主动测试。
答案 1 :(得分:11)
新收藏:http://devdocs.io/dom/ (Devdocs.io一般来说很多参考资料非常棒)
(旧)我真的很喜欢这个DOM参考:http://krook.org/jsdom/
答案 2 :(得分:4)
对于新手来说,这将有助于理解您正在使用的内容并分离以下概念:
Javascript(用于访问DOM的语言,可以使用其他脚本语言),
HTML或XML文档(构成网页基础的标记)
和DOM(用作API的文档模型,允许您操作文档的结构和内容)。
它还链接到这些信息性文件:
W3C:What is the Document Object Model?
MDN:Introduction - Document Object Model
维基百科:Document Object Model
了解DOM在历史背景下的开发方式也有助于理解其结构以及如何使用它,这也包含在上述链接中。
答案 3 :(得分:3)
答案 4 :(得分:2)
我有时使用javascriptkit,我发现它非常有用。