DOM 全称是 Document Object Model,也就是文档对象模型。是针对XML的基于树的API。描述了处理网页内容的方法和接口,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。
DOM定义了一个HTMLDocument和HTMLElement做为这种实现的基础,就是说为了能以编程的方法操作这个 HTML 的内容(比如添加某些元素、修改元素的内容、删除某些元素),我们把这个 HTML 看做一个对象树(DOM树),它本身和里面的所有东西比如
当浏览器载入 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) |
、、 等都是元素节点,即标签。 |
文本节点(Text) |
向用户展示的内容,如 |
属性节点(Attr) |
元素属性,元素才有属性,如标签的链接属性href=""。 |
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() | 返回带有指定标签名的对象集合。 |
在HTML DOM中, Element元素对象对应着每一个 HTML标签元素,如:
等等HTML标签元素。Element对象可以是元素节点,文本节点,注释节点。NodeList对象代表了节点列表,类似于 HTML元素的子节点集合。元素可以有属性。
1. Node接口的属性和方法
Modifier and Type | 方法 | 描述 |
---|---|---|
Node |
appendChild(Node newChild) |
将节点 |
Node |
cloneNode(boolean deep) |
返回此节点的副本,即,作为节点的通用拷贝构造函数。 |
short |
compareDocumentPosition(Node other) |
将参考节点,即将被调用此方法的节点与文档中的位置相关联的节点(即作为参数传递的节点)进行比较。 |
NamedNodeMap |
getAttributes() |
A |
String |
getBaseURI() |
该节点的绝对基本URI或 |
NodeList |
getChildNodes() |
A |
Object |
getFeature(String feature, String version) |
该方法返回一个专门的对象,该对象实现指定的特征和版本的专门API,如 |
Node |
getFirstChild() |
这个节点的第一个孩子。 |
Node |
getLastChild() |
这个节点的最后一个孩子。 |
String |
getLocalName() |
返回此节点的限定名称的本地部分。 |
String |
getNamespaceURI() |
该节点的命名空间URI,如果未指定, |
Node |
getNextSibling() |
紧随该节点的节点。 |
String |
getNodeName() |
该节点的名称取决于其类型; 见上表。 |
short |
getNodeType() |
代表基础对象的类型的代码,如上所定义。 |
String |
getNodeValue() |
该节点的值取决于其类型; 见上表。 |
Document |
getOwnerDocument() |
与此节点相关联的 |
Node |
getParentNode() |
这个节点的父节点。 |
String |
getPrefix() |
该节点的命名空间前缀,如果未指定, |
Node |
getPreviousSibling() |
紧邻节点之前的节点。 |
String |
getTextContent() |
此属性返回此节点及其后代的文本内容。 |
Object |
getUserData(String key) |
检索与该节点上的键相关联的对象。 |
boolean |
hasAttributes() |
返回此节点(如果它是一个元素)是否具有任何属性。 |
boolean |
hasChildNodes() |
返回此节点是否有任何子节点。 |
Node |
insertBefore(Node newChild, Node refChild) |
插入节点 |
boolean |
isDefaultNamespace(String namespaceURI) |
此方法检查指定的 |
boolean |
isEqualNode(Node arg) |
测试两个节点是否相等。 |
boolean |
isSameNode(Node other) |
返回此节点是否与给定节点相同。 |
boolean |
isSupported(String feature, String version) |
测试DOM实现是否实现特定功能,并且此节点支持该功能,如下所述。 |
String |
lookupNamespaceURI(String prefix) |
从该节点开始,查找与给定前缀相关联的命名空间URI。 |
String |
lookupPrefix(String namespaceURI) |
从该节点开始查找与给定名称空间URI关联的前缀。 |
void |
normalize() |
将 |
Node |
removeChild(Node oldChild) |
从子列表中删除 |
Node |
replaceChild(Node newChild, Node oldChild) |
替换子节点 |
void |
setNodeValue(String nodeValue) |
该节点的值取决于其类型; 见上表。 |
void |
setPrefix(String prefix) |
该节点的命名空间前缀,如果未指定, |
void |
setTextContent(String textContent) |
此属性返回此节点及其后代的文本内容。 |
Object |
setUserData(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 | 返回节点列表的节点数目。 |
注意操作这些方法的具体对象,parentNode()方法是由子节点操作找到父节点,firstChild/lastChild方法都是由父节点操作去找子节点。兄弟之前用nextSibling/previousSibling操作。
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 | 某个键盘按键被松开。 |
属性 | 描述 | DOM |
---|---|---|
onabort | 图像的加载被中断。 ( | 2 |
onbeforeunload | 该事件在即将离开页面(刷新或关闭)时触发 | 2 |
onerror | 在加载文档或图像时发生错误。 ( | |
onhashchange | 该事件在当前 URL 的锚部分发生修改时触发。 | |
onload | 一张页面或一幅图像完成加载。 | 2 |
onpageshow | 该事件在用户访问页面时触发 | |
onpagehide | 该事件在用户离开当前网页跳转到另外一个页面时触发 | |
onresize | 窗口或框架被重新调整大小。 | 2 |
onscroll | 当文档被滚动时发生的事件。 | 2 |
onunload | 用户退出页面。 ( 和 | 2 |
属性 | 描述 | DOM |
---|---|---|
onblur | 元素失去焦点时触发 | 2 |
onchange | 该事件在表单元素的内容改变时触发( , |
2 |
onfocus | 元素获取焦点时触发 | 2 |
onfocusin | 元素即将获取焦点时触发 | 2 |
onfocusout | 元素即将失去焦点时触发 | 2 |
oninput | 元素获取用户输入时触发 | 3 |
onreset | 表单重置时触发 | 2 |
onsearch | 用户向搜索域输入文本时触发 () | |
onselect | 用户选取文本时触发 ( 和 | 2 |
onsubmit | 表单提交时触发 | 2 |
属性 | 描述 | DOM |
---|---|---|
oncopy | 该事件在用户拷贝元素内容时触发 | |
oncut | 该事件在用户剪切元素内容时触发 | |
onpaste | 该事件在用户粘贴元素内容时触发 |
属性 | 描述 | DOM |
---|---|---|
onafterprint | 该事件在页面已经开始打印,或者打印窗口已经关闭时触发 | |
onbeforeprint | 该事件在页面即将开始打印时触发 |
事件 | 描述 | DOM |
---|---|---|
ondrag | 该事件在元素正在拖动时触发 | |
ondragend | 该事件在用户完成元素的拖动时触发 | |
ondragenter | 该事件在拖动的元素进入放置目标时触发 | |
ondragleave | 该事件在拖动元素离开放置目标时触发 | |
ondragover | 该事件在拖动元素在放置目标上时触发 | |
ondragstart | 该事件在用户开始拖动元素时触发 | |
ondrop | 该事件在拖动元素放置在目标区域时触发 |
事件 | 描述 | 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 | 事件在视频由于要播放下一帧而需要缓冲时触发。 |
事件 | 描述 | DOM |
---|---|---|
animationend | 该事件在 CSS 动画结束播放时触发 | |
animationiteration | 该事件在 CSS 动画重复播放时触发 | |
animationstart | 该事件在 CSS 动画开始播放时触发 |
事件 | 描述 | DOM |
---|---|---|
transitionend | 该事件在 CSS 完成过渡后触发。 |
事件 | 描述 | DOM |
---|---|---|
onmessage | 该事件通过或者从对象(WebSocket, Web Worker, Event Source 或者子 frame 或父窗口)接收到消息时触发 | |
onmousewheel | 已废弃。 使用onwheel 事件替代 | |
ononline | 该事件在浏览器开始在线工作时触发。 | |
onoffline | 该事件在浏览器开始离线工作时触发。 | |
onpopstate | 该事件在窗口的浏览历史(history 对象)发生改变时触发。 | |
onshow | 该事件当 | |
onstorage | 该事件在 Web Storage(HTML 5 Web 存储)更新时触发 | |
ontoggle | 该事件在用户打开或关闭 元素时触发 |
|
onwheel | 该事件在鼠标滚轮在元素上下滚动时触发 |
静态变量 | 描述 | DOM |
---|---|---|
CAPTURING-PHASE | 当前事件阶段为捕获阶段(3) | 1 |
AT-TARGET | 当前事件是目标阶段,在评估目标事件(1) | 2 |
BUBBLING-PHASE | 当前的事件为冒泡阶段 (2) | 3 |
属性 | 描述 | DOM |
---|---|---|
bubbles | 返回布尔值,指示事件是否是起泡事件类型。 | 2 |
cancelable | 返回布尔值,指示事件是否可拥可取消的默认动作。 | 2 |
currentTarget | 返回其事件监听器触发该事件的元素。 | 2 |
eventPhase | 返回事件传播的当前阶段。 | 2 |
target | 返回触发此事件的元素(事件的目标节点)。 | 2 |
timeStamp | 返回事件生成的日期和时间。 | 2 |
type | 返回当前 Event 对象表示的事件的名称。 | 2 |
方法 | 描述 | DOM |
---|---|---|
initEvent() | 初始化新创建的 Event 对象的属性。 | 2 |
preventDefault() | 通知浏览器不要执行与事件关联的默认动作。 | 2 |
stopPropagation() | 不再派发事件。 | 2 |
方法 | 描述 | DOM |
---|---|---|
addEventListener() | 允许在目标事件中注册监听事件(IE8= attachEvent()) | 2 |
dispatchEvent() | 允许发送事件到监听器上 (IE8 =fireEvent()) | 2 |
removeEventListener() | 运行一次注册在事件目标上的监听事件(IE8 =detachEvent()) | 2 |
方法 | 描述 | DOM |
---|---|---|
handleEvent() | 把任意对象注册为事件处理程序 | 2 |
方法 | 描述 | DOM |
---|---|---|
createEvent() | 2 |
属性 | 描述 | 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 |
dom
DIV1的内容
DIV2的内容
DIV
// 文档加载完后,再执行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;
}
}
Javascript操作BOM和DOM详解(1)
Javascript操作BOM和DOM详解(2)
Javascript操作BOM和DOM详解(3)实例:js操作checkbox、select、table