一、DOM文档对象模型
DOM 全称是 Document Object Model,也就是文档对象模型。是针对XML的基于树的API。描述了处理网页内容的方法和接口,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。
DOM定义了一个HTMLDocument和HTMLElement做为这种实现的基础,就是说为了能以编程的方法操作这个 HTML 的内容(比如添加某些元素、修改元素的内容、删除某些元素),我们把这个 HTML 看做一个对象树(DOM树),它本身和里面的所有东西比如 <div></div> 这些标签都看做一个对象。
当浏览器载入 HTML 文档, 它就会成为 document 对象。document 对象是HTML文档的根节点与所有其他节点(元素节点,文本节点,属性节点, 注释节点)。
Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。
1.HTML页面对应DOM树

DOM模型将整个文档(XML文档和HTML文档)看成一个树形结构,在DOM中,HTML文档的层次结构被表示为一个树形结构。并用document对象表示该文档,树的每个子节点表示HTML文档中的不同内容。
2.DOM节点
HTML页面中的每一个元素,都是一个节点(Node)这个节点又分下面三种类型,HTML页面是由这些节点构成的集合。HTML中有三种节点类型:
| 类型 | 描述 |
| 元素节点(Element) | <html>、<body>、<p>等都是元素节点,即标签。 |
| 文本节点(Text) | 向用户展示的内容,如<li>...</li>中的JavaScript、DOM、CSS等文本。 |
| 属性节点(Attr) | 元素属性,元素才有属性,如<a>标签的链接属性href=""。 |
二、DOM的Document对象
Document 对象是HTML文档的根节点与所有其他节点(元素节点,文本节点,属性节点, 注释节点)。Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。
Document 对象的属性和方法
| 属性 / 方法 | 描述 |
|---|---|
| document.activeElement | 返回当前获取焦点元素 |
| document.addEventListener() | 向文档添加句柄 |
| document.anchors | 返回对文档中所有 Anchor 对象的引用。 |
| document.baseURI | 返回文档的绝对基础 URI |
| document.close() | 关闭用 document.open() 方法打开的输出流,并显示选定的数据。 |
| document.cookie | 设置或返回与当前文档有关的所有 cookie。 |
| document.createAttribute() | 创建一个属性节点 |
| document.createComment() | createComment() 方法可创建注释节点。 |
| document.createDocumentFragment() | 创建空的 DocumentFragment 对象,并返回此对象。 |
| document.createElement() | 创建元素节点。 |
| document.createTextNode() | 创建文本节点。 |
| document.doctype | 返回与文档相关的文档类型声明 (DTD)。 |
| document.documentElement | 返回文档的根节点 |
| document.documentMode | 返回用于通过浏览器渲染文档的模式 |
| document.documentURI | 设置或返回文档的位置 |
| document.domain | 返回当前文档的域名。 |
| document.domConfig | 返回normalizeDocument()被调用时所使用的配置 |
| document.embeds | 返回文档中所有嵌入的内容(embed)集合 |
| document.forms | 返回对文档中所有 Form 对象引用。 |
| document. getElementsByClassName() | 返回文档中所有指定类名的元素集合,作为 NodeList 对象。 |
| document.getElementById() | 返回对拥有指定 id 的第一个对象的引用。 |
| document.getElementsByName() | 返回带有指定名称的对象集合。 |
| document.getElementsByTagName() | 返回带有指定标签名的对象集合。 |
| document.images | 返回对文档中所有 Image 对象引用。 |
| document.implementation | 返回处理该文档的 DOMImplementation 对象。 |
| document.importNode() | 把一个节点从另一个文档复制到该文档以便应用。 |
| document.inputEncoding | 返回用于文档的编码方式(在解析时)。 |
| document.lastModified | 返回文档被最后修改的日期和时间。 |
| document.links | 返回对文档中所有 Area 和 Link 对象引用。 |
| document.normalize() | 删除空文本节点,并连接相邻节点 |
| document.normalizeDocument() | 删除空文本节点,并连接相邻节点的 |
| document.open() | 打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。 |
| document.querySelector() | 返回文档中匹配指定的CSS选择器的第一元素 |
| document.querySelectorAll() | document.querySelectorAll() 是 HTML5中引入的新方法,返回文档中匹配的CSS选择器的所有元素节点列表 |
| document.readyState | 返回文档状态 (载入中……) |
| document.referrer | 返回载入当前文档的文档的 URL。 |
| document.removeEventListener() | 移除文档中的事件句柄(由 addEventListener() 方法添加) |
| document.renameNode() | 重命名元素或者属性节点。 |
| document.scripts | 返回页面中所有脚本的集合。 |
| document.strictErrorChecking | 设置或返回是否强制进行错误检查。 |
| document.title | 返回当前文档的标题。 |
| document.URL | 返回文档完整的URL |
| document.write() | 向文档写 HTML 表达式 或 JavaScript 代码。 |
| document.writeln() | 等同于 write() 方法,不同的是在每个表达式之后写一个换行符。 |
其中最主要是以下三个获得元素节点对象的方法:
| document.getElementById() | 返回对拥有指定 id 的第一个对象的引用。 |
| document.getElementsByName() | 返回带有指定名称的对象集合。 |
| document.getElementsByTagName() | 返回带有指定标签名的对象集合。 |
三、DOM的元素(Element)对象
在HTML DOM中, Element元素对象对应着每一个 HTML标签元素,如:<p><a><h2>等等HTML标签元素。Element对象可以是元素节点,文本节点,注释节点。NodeList对象代表了节点列表,类似于 HTML元素的子节点集合。元素可以有属性。
1. Node接口的属性和方法
-
-
Modifier and Type 方法 描述 NodeappendChild(Node newChild)将节点
newChild添加到此节点的子节点列表的末尾。NodecloneNode(boolean deep)返回此节点的副本,即,作为节点的通用拷贝构造函数。
shortcompareDocumentPosition(Node other)将参考节点,即将被调用此方法的节点与文档中的位置相关联的节点(即作为参数传递的节点)进行比较。
NamedNodeMapgetAttributes()A
NamedNodeMap包含该节点的属性(如果它是一个Element)或null。StringgetBaseURI()该节点的绝对基本URI或
null如果实现无法获取绝对URI。NodeListgetChildNodes()A
NodeList包含此节点的所有子节点。ObjectgetFeature(String feature, String version)该方法返回一个专门的对象,该对象实现指定的特征和版本的专门API,如
NodegetFirstChild()这个节点的第一个孩子。
NodegetLastChild()这个节点的最后一个孩子。
StringgetLocalName()返回此节点的限定名称的本地部分。
StringgetNamespaceURI()该节点的命名空间URI,如果未指定,
null(请参阅)。NodegetNextSibling()紧随该节点的节点。
StringgetNodeName()该节点的名称取决于其类型; 见上表。
shortgetNodeType()代表基础对象的类型的代码,如上所定义。
StringgetNodeValue()该节点的值取决于其类型; 见上表。
DocumentgetOwnerDocument()与此节点相关联的
Document对象。NodegetParentNode()这个节点的父节点。
StringgetPrefix()该节点的命名空间前缀,如果未指定,
null。NodegetPreviousSibling()紧邻节点之前的节点。
StringgetTextContent()此属性返回此节点及其后代的文本内容。
ObjectgetUserData(String key)检索与该节点上的键相关联的对象。
booleanhasAttributes()返回此节点(如果它是一个元素)是否具有任何属性。
booleanhasChildNodes()返回此节点是否有任何子节点。
NodeinsertBefore(Node newChild, Node refChild)插入节点
newChild现有的子节点之前refChild。booleanisDefaultNamespace(String namespaceURI)此方法检查指定的
namespaceURI是否为默认命名空间。booleanisEqualNode(Node arg)测试两个节点是否相等。
booleanisSameNode(Node other)返回此节点是否与给定节点相同。
booleanisSupported(String feature, String version)测试DOM实现是否实现特定功能,并且此节点支持该功能,如下所述。
StringlookupNamespaceURI(String prefix)从该节点开始,查找与给定前缀相关联的命名空间URI。
StringlookupPrefix(String namespaceURI)从该节点开始查找与给定名称空间URI关联的前缀。
voidnormalize()将
Node(包括属性节点)下的子树的全部深度全部Text在“正常”形式中,其中只有结构(例如元素,注释,处理指令,CDATA部分和实体引用)将Text节点即,既没有相邻的Text节点也没有空的Text节点。NoderemoveChild(Node oldChild)从子列表中删除
oldChild指示的子节点,并返回。NodereplaceChild(Node newChild, Node oldChild)替换子节点
oldChild与newChild儿童的名单,并返回oldChild节点。voidsetNodeValue(String nodeValue)该节点的值取决于其类型; 见上表。
voidsetPrefix(String prefix)该节点的命名空间前缀,如果未指定,
null。voidsetTextContent(String textContent)此属性返回此节点及其后代的文本内容。
ObjectsetUserData(String key, Object data, UserDataHandler handler)将对象与此节点上的键相关联。
-
2.Element是Node接口的实现类
以下属性和方法,可适用于所有 HTML 元素使用。具体使用时,可以使用父类接口中的方法,也可以用实现类Element中的方法。红色是重点方法
| 属性 / 方法 | 描述 |
|---|---|
| element.accessKey | 设置或返回accesskey一个元素 |
| element.addEventListener() | 向指定元素添加事件句柄 |
| element.appendChild() | 为元素添加一个新的子元素 |
| element.attributes | 返回一个元素的属性数组 |
| element.childNodes | 返回元素的一个子节点的数组 |
| element.classlist | 返回元素的类名,作为 DOMTokenList 对象。 |
| element.className | 设置或返回元素的class属性 |
| element.clientHeight | 在页面上返回内容的可视高度(不包括边框,边距或滚动条) |
| element.clientWidth | 在页面上返回内容的可视宽度(不包括边框,边距或滚动条) |
| element.cloneNode() | 克隆某个元素 |
| element.compareDocumentPosition() | 比较两个元素的文档位置。 |
| element.contentEditable | 设置或返回元素的内容是否可编辑 |
| element.dir | 设置或返回一个元素中的文本方向 |
| element.firstChild | 返回元素的第一个子节点 |
| element.focus() | 设置文档或元素获取焦点 |
| element.getAttribute() | 返回指定元素的属性值 |
| element.getAttributeNode() | 返回指定属性节点 |
| element.getElementsByTagName() | 返回指定标签名的所有子元素集合。 |
| element. getElementsByClassName() | 返回文档中所有指定类名的元素集合,作为 NodeList 对象。 |
| element.getFeature() | 返回指定特征的执行APIs对象。 |
| element.getUserData() | 返回一个元素中关联键值的对象。 |
| element.hasAttribute() | 如果元素中存在指定的属性返回 true,否则返回false。 |
| element.hasAttributes() | 如果元素有任何属性返回true,否则返回false。 |
| element.hasChildNodes() | 返回一个元素是否具有任何子元素 |
| element.hasfocus() | 返回布尔值,检测文档或元素是否获取焦点 |
| element.id | 设置或者返回元素的 id。 |
| element.innerHTML | 设置或者返回元素的内容。 |
| element.insertBefore() | 现有的子元素之前插入一个新的子元素 |
| element.isContentEditable | 如果元素内容可编辑返回 true,否则返回false |
| element.isDefaultNamespace() | 如果指定了namespaceURI 返回 true,否则返回 false。 |
| element.isEqualNode() | 检查两个元素是否相等 |
| element.isSameNode() | 检查两个元素所有有相同节点。 |
| element.isSupported() | 如果在元素中支持指定特征返回 true。 |
| element.lang | 设置或者返回一个元素的语言。 |
| element.lastChild | 返回的最后一个子元素 |
| element.namespaceURI | 返回命名空间的 URI。 |
| element.nextSibling | 返回该元素紧跟的一个元素 |
| element.nodeName | 返回元素的标记名(大写) |
| element.nodeType | Returns the node type of an element |
| element.nodeValue | 返回元素的类型 |
| element.normalize() | 使得此成为一个"normal"的形式,其中只有结构(如元素,注释,处理指令,CDATA节和实体引用)隔开Text节点,即元素(包括属性)下面的所有文本节点,既没有相邻的文本节点也没有空的文本节点 |
| element.offsetHeight | 返回,任何一个元素的高度包括边框和填充,但不是边距 |
| element.offsetWidth | 返回元素的宽度,包括边框和填充,但不是边距 |
| element.offsetLeft | 返回当前元素的相对水平偏移位置的偏移容器 |
| element.offsetParent | 返回元素的偏移容器 |
| element.offsetTop | 返回当前元素的相对垂直偏移位置的偏移容器 |
| element.ownerDocument | 返回元素的根元素(文档对象) |
| element.parentNode | 返回元素的父节点 |
| element.previousSibling | 返回某个元素紧接之前元素 |
| element.querySelector() | 返回匹配指定 CSS 选择器元素的第一个子元素 |
| document.querySelectorAll() | 返回匹配指定 CSS 选择器元素的所有子元素节点列表 |
| element.removeAttribute() | 从元素中删除指定的属性 |
| element.removeAttributeNode() | 删除指定属性节点并返回移除后的节点。 |
| element.removeChild() | 删除一个子元素 |
| element.removeEventListener() | 移除由 addEventListener() 方法添加的事件句柄 |
| element.replaceChild() | 替换一个子元素 |
| element.scrollHeight | 返回整个元素的高度(包括带滚动条的隐蔽的地方) |
| element.scrollLeft | 返回当前视图中的实际元素的左边缘和左边缘之间的距离 |
| element.scrollTop | 返回当前视图中的实际元素的顶部边缘和顶部边缘之间的距离 |
| element.scrollWidth | 返回元素的整个宽度(包括带滚动条的隐蔽的地方) |
| element.setAttribute() | 设置或者改变指定属性并指定值。 |
| element.setAttributeNode() | 设置或者改变指定属性节点。 |
| element.setIdAttribute() | |
| element.setIdAttributeNode() | |
| element.setUserData() | 在元素中为指定键值关联对象。 |
| element.style | 设置或返回元素的样式属性 |
| element.tabIndex | 设置或返回元素的标签顺序。 |
| element.tagName | 作为一个字符串返回某个元素的标记名(大写) |
| element.textContent | 设置或返回一个节点和它的文本内容 |
| element.title | 设置或返回元素的title属性 |
| element.toString() | 一个元素转换成字符串 |
| nodelist.item() | 返回某个元素基于文档树的索引 |
| nodelist.length | 返回节点列表的节点数目。 |
3.节点对象的操作

注意操作这些方法的具体对象,parentNode()方法是由子节点操作找到父节点,firstChild/lastChild方法都是由父节点操作去找子节点。兄弟之前用nextSibling/previousSibling操作。
四、DOM的事件对象
HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序。事件通常与函数结合使用,当事件发生后函数会被执行。
1.鼠标事件
| 属性 | 描述 | DOM |
|---|---|---|
| onclick | 当用户点击某个对象时调用的事件句柄。 | 2 |
| oncontextmenu | 在用户点击鼠标右键打开上下文菜单时触发 | |
| ondblclick | 当用户双击某个对象时调用的事件句柄。 | 2 |
| onmousedown | 鼠标按钮被按下。 | 2 |
| onmouseenter | 当鼠标指针移动到元素上时触发。 | 2 |
| onmouseleave | 当鼠标指针移出元素时触发 | 2 |
| onmousemove | 鼠标被移动。 | 2 |
| onmouseover | 鼠标移到某元素之上。 | 2 |
| onmouseout | 鼠标从某元素移开。 | 2 |
| onmouseup | 鼠标按键被松开。 | 2 |
2.键盘事件
| 属性 | 描述 | DOM |
|---|---|---|
| onkeydown | 某个键盘按键被按下。 | 2 |
| onkeypress | 某个键盘按键被按下并松开。 | 2 |
| onkeyup | 某个键盘按键被松开。 |
3.框架/对象(Frame/Object)事件
| 属性 | 描述 | DOM |
|---|---|---|
| onabort | 图像的加载被中断。 ( <object>) | 2 |
| onbeforeunload | 该事件在即将离开页面(刷新或关闭)时触发 | 2 |
| onerror | 在加载文档或图像时发生错误。 ( <object>,<body>和 <frameset>) | |
| onhashchange | 该事件在当前 URL 的锚部分发生修改时触发。 | |
| onload | 一张页面或一幅图像完成加载。 | 2 |
| onpageshow | 该事件在用户访问页面时触发 | |
| onpagehide | 该事件在用户离开当前网页跳转到另外一个页面时触发 | |
| onresize | 窗口或框架被重新调整大小。 | 2 |
| onscroll | 当文档被滚动时发生的事件。 | 2 |
| onunload | 用户退出页面。 (<body> 和 <frameset>) | 2 |
表单事件
| 属性 | 描述 | DOM |
|---|---|---|
| onblur | 元素失去焦点时触发 | 2 |
| onchange | 该事件在表单元素的内容改变时触发( <input>, <keygen>, <select>, 和 <textarea>) | 2 |
| onfocus | 元素获取焦点时触发 | 2 |
| onfocusin | 元素即将获取焦点时触发 | 2 |
| onfocusout | 元素即将失去焦点时触发 | 2 |
| oninput | 元素获取用户输入时触发 | 3 |
| onreset | 表单重置时触发 | 2 |
| onsearch | 用户向搜索域输入文本时触发 (<input="search">) | |
| onselect | 用户选取文本时触发 ( <input> 和 <textarea>) | 2 |
| onsubmit | 表单提交时触发 | 2 |
4.剪贴板事件
| 属性 | 描述 | DOM |
|---|---|---|
| oncopy | 该事件在用户拷贝元素内容时触发 | |
| oncut | 该事件在用户剪切元素内容时触发 | |
| onpaste | 该事件在用户粘贴元素内容时触发 |
5.打印事件
| 属性 | 描述 | DOM |
|---|---|---|
| onafterprint | 该事件在页面已经开始打印,或者打印窗口已经关闭时触发 | |
| onbeforeprint | 该事件在页面即将开始打印时触发 |
6.拖动事件
| 事件 | 描述 | DOM |
|---|---|---|
| ondrag | 该事件在元素正在拖动时触发 | |
| ondragend | 该事件在用户完成元素的拖动时触发 | |
| ondragenter | 该事件在拖动的元素进入放置目标时触发 | |
| ondragleave | 该事件在拖动元素离开放置目标时触发 | |
| ondragover | 该事件在拖动元素在放置目标上时触发 | |
| ondragstart | 该事件在用户开始拖动元素时触发 | |
| ondrop | 该事件在拖动元素放置在目标区域时触发 |
7.多媒体(Media)事件
| 事件 | 描述 | DOM |
|---|---|---|
| onabort | 事件在视频/音频(audio/video)终止加载时触发。 | |
| oncanplay | 事件在用户可以开始播放视频/音频(audio/video)时触发。 | |
| oncanplaythrough | 事件在视频/音频(audio/video)可以正常播放且无需停顿和缓冲时触发。 | |
| ondurationchange | 事件在视频/音频(audio/video)的时长发生变化时触发。 | |
| onemptied | 当期播放列表为空时触发 | |
| onended | 事件在视频/音频(audio/video)播放结束时触发。 | |
| onerror | 事件在视频/音频(audio/video)数据加载期间发生错误时触发。 | |
| onloadeddata | 事件在浏览器加载视频/音频(audio/video)当前帧时触发触发。 | |
| onloadedmetadata | 事件在指定视频/音频(audio/video)的元数据加载后触发。 | |
| onloadstart | 事件在浏览器开始寻找指定视频/音频(audio/video)触发。 | |
| onpause | 事件在视频/音频(audio/video)暂停时触发。 | |
| onplay | 事件在视频/音频(audio/video)开始播放时触发。 | |
| onplaying | 事件在视频/音频(audio/video)暂停或者在缓冲后准备重新开始播放时触发。 | |
| onprogress | 事件在浏览器下载指定的视频/音频(audio/video)时触发。 | |
| onratechange | 事件在视频/音频(audio/video)的播放速度发送改变时触发。 | |
| onseeked | 事件在用户重新定位视频/音频(audio/video)的播放位置后触发。 | |
| onseeking | 事件在用户开始重新定位视频/音频(audio/video)时触发。 | |
| onstalled | 事件在浏览器获取媒体数据,但媒体数据不可用时触发。 | |
| onsuspend | 事件在浏览器读取媒体数据中止时触发。 | |
| ontimeupdate | 事件在当前的播放位置发送改变时触发。 | |
| onvolumechange | 事件在音量发生改变时触发。 | |
| onwaiting | 事件在视频由于要播放下一帧而需要缓冲时触发。 |
8.动画事件
| 事件 | 描述 | DOM |
|---|---|---|
| animationend | 该事件在 CSS 动画结束播放时触发 | |
| animationiteration | 该事件在 CSS 动画重复播放时触发 | |
| animationstart | 该事件在 CSS 动画开始播放时触发 |
9.过渡事件
| 事件 | 描述 | DOM |
|---|---|---|
| transitionend | 该事件在 CSS 完成过渡后触发。 |
10.其他事件
| 事件 | 描述 | DOM |
|---|---|---|
| onmessage | 该事件通过或者从对象(WebSocket, Web Worker, Event Source 或者子 frame 或父窗口)接收到消息时触发 | |
| onmousewheel | 已废弃。 使用onwheel 事件替代 | |
| ononline | 该事件在浏览器开始在线工作时触发。 | |
| onoffline | 该事件在浏览器开始离线工作时触发。 | |
| onpopstate | 该事件在窗口的浏览历史(history 对象)发生改变时触发。 | |
| onshow | 该事件当 <menu> 元素在上下文菜单显示时触发 | |
| onstorage | 该事件在 Web Storage(HTML 5 Web 存储)更新时触发 | |
| ontoggle | 该事件在用户打开或关闭 <details> 元素时触发 | |
| onwheel | 该事件在鼠标滚轮在元素上下滚动时触发 |
11.事件对象常量和属性
11.1常量
| 静态变量 | 描述 | DOM |
|---|---|---|
| CAPTURING-PHASE | 当前事件阶段为捕获阶段(3) | 1 |
| AT-TARGET | 当前事件是目标阶段,在评估目标事件(1) | 2 |
| BUBBLING-PHASE | 当前的事件为冒泡阶段 (2) | 3 |
11.2属性
| 属性 | 描述 | DOM |
|---|---|---|
| bubbles | 返回布尔值,指示事件是否是起泡事件类型。 | 2 |
| cancelable | 返回布尔值,指示事件是否可拥可取消的默认动作。 | 2 |
| currentTarget | 返回其事件监听器触发该事件的元素。 | 2 |
| eventPhase | 返回事件传播的当前阶段。 | 2 |
| target | 返回触发此事件的元素(事件的目标节点)。 | 2 |
| timeStamp | 返回事件生成的日期和时间。 | 2 |
| type | 返回当前 Event 对象表示的事件的名称。 | 2 |
11.3方法
| 方法 | 描述 | DOM |
|---|---|---|
| initEvent() | 初始化新创建的 Event 对象的属性。 | 2 |
| preventDefault() | 通知浏览器不要执行与事件关联的默认动作。 | 2 |
| stopPropagation() | 不再派发事件。 | 2 |
12.目标事件对象
方法
| 方法 | 描述 | DOM |
|---|---|---|
| addEventListener() | 允许在目标事件中注册监听事件(IE8= attachEvent()) | 2 |
| dispatchEvent() | 允许发送事件到监听器上 (IE8 =fireEvent()) | 2 |
| removeEventListener() | 运行一次注册在事件目标上的监听事件(IE8 =detachEvent()) | 2 |
13.事件监听对象
方法
| 方法 | 描述 | DOM |
|---|---|---|
| handleEvent() | 把任意对象注册为事件处理程序 | 2 |
14.文档事件对象
方法
| 方法 | 描述 | DOM |
|---|---|---|
| createEvent() | 2 |
15.鼠标/键盘事件对象
属性
| 属性 | 描述 | DOM |
|---|---|---|
| altKey | 返回当事件被触发时,"ALT" 是否被按下。 | 2 |
| button | 返回当事件被触发时,哪个鼠标按钮被点击。 | 2 |
| clientX | 返回当事件被触发时,鼠标指针的水平坐标。 | 2 |
| clientY | 返回当事件被触发时,鼠标指针的垂直坐标。 | 2 |
| ctrlKey | 返回当事件被触发时,"CTRL" 键是否被按下。 | 2 |
| Location | 返回按键在设备上的位置 | 3 |
| charCode | 返回onkeypress事件触发键值的字母代码。 | 2 |
| key | 在按下按键时返回按键的标识符。 | 3 |
| keyCode | 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。 | 2 |
| which | 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。 | 2 |
| metaKey | 返回当事件被触发时,"meta" 键是否被按下。 | 2 |
| relatedTarget | 返回与事件的目标节点相关的节点。 | 2 |
| screenX | 返回当某个事件被触发时,鼠标指针的水平坐标。 | 2 |
| screenY | 返回当某个事件被触发时,鼠标指针的垂直坐标。 | 2 |
| shiftKey | 返回当事件被触发时,"SHIFT" 键是否被按下。 | 2 |
方法
| 方法 | 描述 | W3C |
|---|---|---|
| initMouseEvent() | 初始化鼠标事件对象的值 | 2 |
| initKeyboardEvent() | 初始化键盘事件对象的值 | 3 |
五、代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dom</title>
<script type="text/javascript" src="dom.js"></script>
</head>
<body>
<div id="div1" >DIV1的内容<br>
<input id="tt" type="text" name="hobby" value="java">
<input type="image" name="img" src="http://">
<button id="btn" name="OK">确认</button>
</div>
<div id="div2" style="width:250px;background-color: blue;">DIV2的内容</div>
<div id="div" myattr="王宝强" class="myclz" style="width:250px;background-color: green">DIV</div>
<input id="box" type="checkbox" checked="checked" />
<input id="only" type="text" value="只读文本,可以移动" readonly="readonly">
<button id="btn1" >移动到DIV</button>
<button id="btn2" >移动到DIV2</button>
<button id="btn3" >新增</button>
<button id="btn4" >插入到前面</button>
<button id="btn5" >插入到后面</button>
<button id="btn6" > del </button>
<button id="btn7" > replace </button>
</body>
</html>
// 文档加载完后,再执行script
window.onload=function(){
getDom();
getNode();
getEle();
getCheck();
getOnly();
getNode();
getEle();
getCheck();
getOnly();
// 6.移动,增加,删除,修改node节点。对DOM的操作详见java中对DOM的方法
// 增加点击事件
document.getElementById("btn1").onclick=function moveDIV1(){
var subEl=document.getElementById("only");
var El=document.getElementById("div")
// 查看JAVA api中对DOM的操作时的方法和函数
// console.debug(El);
El.appendChild(subEl);
}
// 增加点击事件
document.getElementById("btn2").onclick=function (){
var subEl=document.getElementById("only");
var El=document.getElementById("div2")
El.appendChild(subEl);
}
document.getElementById("btn3").onclick=function() {
var El= document.getElementById("div1");
//创 建一个节点 ,createElement()方法查看java api
var subEl=document.createElement("span");
subEl.innerHTML="新增 ";
El.appendChild(subEl);
}
//在节点前面插入一个新节点
document.getElementById("btn4").onclick=function() {
var El= document.getElementById("btn");
//创 建一个节点 ,createElement()方法查看java api
var subEl=document.createElement("span");
subEl.innerHTML="前面 ";
//insertBefore,在是由父节点调用
El.parentNode.insertBefore(subEl,El);
}
//在某个节点后面插入一个新节点
function insertAfter(newNode,curNode){
if(curNode.nextSibling){
//当前节点的下一个节点的前面,也就是当前节点的后面
curNode.parentNode.insertBefore(newNode,curNode.nextSibling);
}else{
curNode.parentNode.appendChild(newNode);
}
}
//后面插入
document.getElementById("btn5").onclick=function() {
//var El= document.getElementById("div1");没有直接找父节点
var El= document.getElementById("only");
//创 建一个节点 ,createElement()方法查看java api
var subEl=document.createElement("span");
subEl.innerHTML="后面 ";
//insertBefore,在是由父节点调用
insertAfter(subEl,El);
}
//删除一个node,要先找到父节点调用删除
document.getElementById("btn6").onclick=function() {
var El= document.getElementById("only");
//insertBefore,在是由父节点调用
if(El){
El.parentNode.removeChild(El);
}
}
//替换一个node,要先找到父节点调用
document.getElementById("btn7").onclick=function() {
var El= document.getElementById("only");
if(El){
var subEl=document.createElement("button");
subEl.innerHTML="BTN";
subEl.id="001";
El.parentNode.replaceChild(subEl,El);
}
}
};
// 1.获得DOM中的元素,每个元素=node=对象,它有多种方法和属性
function getDom(){
var div = document.getElementById("div1");
var hobby =document.getElementsByName("hobby");
var divs = document.getElementsByTagName("div");
console.debug(div);
console.debug(hobby);
console.debug(divs[0]);
}
// 2.获得node ,Node对象:表示节点,是DOM中的所有类型的父类
/*
* Document: 表示文档节点 nodeName="#document"
* -------------------------------------------------------------------- Element:
* 表示元素节点 nodeType=1 nodeName=元素名称 nodeValue=null Attr: 表示属性节点 nodeType=2
* nodeName=属性名称 nodeValue=属性值 Text: 表示文本节点 nodeType=3 nodeName=#text
* nodeValue=文本内容 (包括回车/换行/空白内容)
*
* 1.node常用属性和方法,document.getElementById()先获得一个node childNodes 所有节点的列表
* hasChildNodes 是否有子节点 firstChild 返回第一个子节点,回车换行也是 lastChild previousSibling
* 返回上一个兄弟 nextSibling 2. 操作元素自定义属性: 获取属性值: 元素对象.getAttribute("属性名"); 设置属性值:
* 元素对象.setAttribute("属性名",值);
*
*
*/
function getNode(){
var mynode=document.getElementById("div1");
console.debug(mynode.childNodes);
console.debug(mynode.firstChild);
console.debug(mynode.firstChild.nextSibling);
}
// 3.操作属性
function getEle(){
var El=document.getElementById("div");
// 获得属性:元素/对象.属性
console.debug(El.style);
console.debug(El["id"]);
// 获得style属性的两种方式,HTML与DOM属性名称不一样
console.debug(El.style["background-color"]);
console.debug(El.style.backgroundColor);
console.debug(El.style.width);
// 设置style属性
El.style.width=350;
El.style="background-color: yellow;";
// 获得自定义的属性
console.debug(El.getAttribute("myattr"));
// 获得类名DOM与html名称不一样
console.debug(El.className);
}
// 4.HTML与DOM属性在一般情况是一致的,有些是不同的如:checkbox,HTML用checked表示选中,DOM中则用true表示选中
function getCheck(){
// 获得元素
var El=document.getElementById("box");
// 可以查看该元素对象的所有属性
console.debug(El);
// 获得元素中的属性
console.debug(El.checked);
// 设置属性的值
if(El.checked){
El.checked=false;
}else{
El.checked=true;
}
console.debug(El.checked);
}
// 5.HTML与DOM属性名称不一致时,可以选打印出所有属性,在里面找到DOM中正确的名称
function getOnly(){
var El=document.getElementById("only");
console.debug(El);
console.debug(El.readOnly);
if(El.readOnly){
El.readonly=false;
}else{
El.readOnly=true;
}
}
本文详细介绍了DOM(文档对象模型)的概念,包括DOM树的结构、节点类型、Document对象的属性和方法,以及如何通过各种方法操作HTML元素。同时,文章还探讨了DOM事件,列举了常见的事件类型和事件处理机制。
905

被折叠的 条评论
为什么被折叠?



