DOM (Document Object Model)文档对象模型
【理解下DOM】
DOM——Document Object Mode。DOM是网页上XHTML中文档正文标题啊、段落、列表、样式、以及ID/class等所有其他数据的一个内部表示。我自己的理解是将网页内容变成代码的形式呈现。
DOM的主要思想是HTML上每个元素分别对应于DOM中的一个节点。
(最容易理解的方式是画树状结构图,这个电脑上不好操作的这里就不展示了。)这个树状结构图是怎么出来的呢?是将网页的XHTML结构通过浏览器解析,在内存中创建整个文档节点对象document,然后从文档中出现的第一个标记出发,按照XHTML的层次结构一个一个地加载。[当网页被装载到内存后,在内存中就有了一个按照XHTML结构形成的倒挂的节点对象树状结构。
这个结构中,有3个节点是关键:文档节点、元素节点、文本节点。这个看书就明白了。
===============================
下面我来回忆下这章的重点部分,就是如何使用DOM访问文档节点和如何使用DOM创建、修改、删除文档节点及其属性。(也就是那一大堆东西)
通过浏览器解析后的网页,层次结构可能很复杂,节点很多。但是我们为了避免有些不必要的麻烦。我们在访问或对节点进行操作的时候,只牵扯到此节点的上一级/下一级。(相当于只牵扯到你的父亲或兄弟)。这样,相对而言在对每个节点操作的时候要简便许多。
↓ ↓ ↓
【10个属性】
nodeName: 节点的名字
nodue: 节点的值
nodeType: 节点的类型
parentNode: 父节点
childNodes: 所有子节点的列表
firstChild: 子节点列表中的第一个节点
lastChild: 子节点列表中的最后一个节点
previousSibling: 前一个兄弟节点
nextSibling: 后一个兄弟节点
ownerDocument: *此节点所属的文档 (还不明白。囧)
innerHTML: 更轻松地操纵文档。
通过innerHTML属性将HTML字符串赋值给一个元素。这里就不举例了,反正很好很强大。
虽然这个innerHTML不是标准的DOM,但是几乎所有的浏览器都支持所以我们可以放心用。
通过这么种种属性,我们可以再通过下面的方法来更容易的访问或操作相应的节点。
【14个方法】
childNodes.length: 获取子节点的数量
hasChildNodes(): 查询是否存在子节点
childNodes.item(): 获取子节点
因为childNodes是列表,所有item()括号里面传入的是数组里的下标。
getElementsByTagName_r(): 返回一个NodeList数组,包含所有的标记名特性
getElementsByName(): 获取所有name属性等于指定值的元素。
getElementById(): 获取单个指定元素 (此方法是从文档树中最快找到指定元素的方法)
在XHTML中,id特性是唯一的,也就是说所有元素的id的不一样的。
createElement_x(tagname):创建标记名为tagname的元素
createTextNode(text): 创建包含文本text的文本节点
appendChild(): 在子节点后追加元素。
将给定的节点添加到某个节点的chlidNodes列表尾部
removeChild(): 移除某个节点。
传的参数也就是这个要删除的节点,然后再将这个节点作为函数的返回值返回。
replaceChild():替换某个节点。
createAttribute(name): 用定义的名称name创建特性节点(自定义节点)
insertBefore():将新节点添加的旧节点的前面。
里面有两个参数:要添加的节点和插在哪个节点之前。
cloneNode(): 克隆节点。
这个方法中,需要注意的是:方法带一个boolean参数来指示在复制时 ↓
是包含该节点的所有子节点(深度复制) or 元素本身。
false 表示仅复制元素本身 true表示深度复制。
1、Node对象 Element、Document对象继承他
| 属性名/方法名 |
作用 |
|
childNodes |
返回的是一个NodeList对象,也可以看成是一个数组,它表示调用该属性的节点对象下的所有子节点,可以用childNodes[]来引用数组中单独的元素 |
|
parentNode |
返回节点的父节点 |
|
nodeType |
返回节点的节点类型,IE只支持数字值,FF还支持常量值。1:ELEMENT节点,2:ATTRIBUTE节点,3:TEXT节点,9:DOCUMENT节点 |
|
nodeName |
返回节点的名称,即标签名称 |
|
firstChild |
返回第一个子节点 |
|
lastChild |
返回最后一个子节点 |
|
previousSibling |
返回调用该属性的节点的前一个兄弟节点,没有则返回null |
|
nextSibling |
返回调用该属性的节点的后一个兄弟节点,没有则返回null |
|
appendChild() |
向调用该方法的节点的子节点列表末尾添加节点。注意其参数是一个节点,而不是一个标签。该方法返回的是这个新添加进去的节点,要注意的是,如果要添加的节点已经是文档的一部分的话,那么首先会删除文档原先存在的节点 |
|
cloneNode() |
拷贝节点。当里面参数为true时,那么节点的所有子节点也会被克隆。该方法返回拷贝的节点 |
|
removeChild() |
从子节点列表中删除指定的节点,参数是要删除的节点。成功则返回被删除的节点,失败则返回null |
|
replaceChild(a,b) |
将某个子节点替换为另一个,成功则返回被替换的节点,失败则返回null。第一个参数为用来替换的新节点,第二个参数为将要被替换的节点 |
|
insertBefore(a,b) |
在某个子节点前插入新的子节点,并返回新的子节点。第一个参数为要插入的新的子节点,第二个参数指定要在哪个子节点前插入新节点 |
2、Document对象。Document 对象是一棵文档树的根,可为我们提供对文档数据的最初(或最顶层)的访问入口。 HTMLDocument继承他
|
属性名/方法名 |
作用 |
|
getElementsByTagName() |
返回指定标签的元素节点,类型为数组。例如 document.getElementsByTagName(“p”) |
|
getElementById() |
返回指定ID的元素节点,类型为单个元素。例如 document.getElementById(“id”) |
|
creatElement() |
创建一个元素节点,并返回该元素节点。例如 document.creatElement(“div”) |
|
documentElement |
返回对文档根元素的引用 |
HTMLDocument对象。DOM的Document对象放到HTML文档中则成为了HTMLDocument对象
|
属性名/方法名 |
作用 |
|
getElementsByName() |
返回指定name的元素节点,类型为数组。例如 document.getElementsByName(“name”) |
Element对象 HTMLElement对象继承他
|
属性名/方法名 |
作用 |
|
getElementsByTagName() |
该方法与Documen对象的同名方法类似,不过该方法把查找的范围限定在了调用该方法的元素节点内 |
|
steAttribute(a,b) |
该方法用来改变或创建(当要改变的属性没设置时)节点元素的属性,第一个参数为属性名,第二个参数为属性值,例如element.setAttribute(“id”,”hcp”) |
|
getAttribute() |
该方法用来获取元素节点的属性值,参数为属性名。例如 element.getAttribute(“id”) |
|
removeAttribute() |
删除元素节点的属性,参数为属性名。例如 element.removeAttribute(“id”) |
HTMLElement对象
|
属性名/方法名 |
作用 |
|
className |
元素的class属性 |
|
currentStyle |
该属性为一个对象 |
|
innerHTML |
该属性可设置元素内HTML文本串,HTML代码会被执行(该属性非w3c标准) |
|
innerText |
该属性可设置元素内的纯文本,即使文本包含有html代码也不会被浏览器执行,而是当作纯文本(非w3c标准) |
|
outerHTML |
设置元素内的HTML文本串,元素本身也包括在内(非w3c标准) |
|
outerText |
设置元素内的纯文本,即使文本包含有html代码也不会被浏览器执行,而是当作纯文本.元素本身也包括在内(非w3c标准) |
|
offsetWidth |
返回元素可见区域的宽度,不带单位,单位为px。可见宽度包括元素本身、padding、border。margin不属于可见区域,如果有滚动条,没被显示出来的那部分也不属于可见区域。在IE下如果元素被撑大,则会计算撑大后的可见区域宽度。总之该属性返回的是实际的可见区域宽度。该属性不是w3c标准,但得到了很好的支持 |
|
offsetHeight |
作用同上 |
|
clientWidth |
作用性质与offsetWidth相似,不过它计算的只是元素本身+padding的值, |
|
clientHeight |
作用同上 |
|
offsetLeft |
返回元素的可见区域的边界距其父元素本身(即不考虑padding、margin、border)的边界的左边偏移量,如果其父元素(或更高级的父元素)没有相对或绝对定位属性,则会把body算作其父元素。使用此属性时最好把父元素设成绝对或相对定位。另外,不管此元素是绝对定位还是静态定位都适用于该属性 |
|
offsetTop |
作用同上。没有offsetRight、offsetBottom的说法 |
|
offsetParent |
返回对最近的具有相对或绝对定位的父元素的引用。该属性不是w3c标准,但得到了很好的支持 |
|
scrollWidth |
返回元素的本身宽度加上padding加上可滚动的宽度(如果有滚动条的话),注意,IE6、7下有滚动条的时候,padding左右两边的宽度都会算在内,但在IE8、FF下有滚动条的时候,只有左边的padding才会有作用,因此只会加上左边padding的宽度 |
|
scrollHeight |
作用同上,该属性不是w3c标准,但得到了很好的支持 |
|
scrollTop |
相当于返回或设置已滚动区域的高度 |
|
scrollLeft |
作用同上,该属性不是w3c标准,但得到了很好的支持 |
CSS2Properties对象,用来获取元素样式
1、 element.style引用的是一个CSS2Properties对象,此时该对象只代表内联样式的集合,即由HTML标签中的style属性设置的样式。
2、element.currentStyle引用了一个CSS2Properties对象,不过该对象包含的是元素的最终样式,该属性只能用于IE浏览器。 该属性为只读
用法举例: var s=element.currentStyle.fontSize
3、 window.getComputedStyle() 或document.defaultView.getComputedStyle() 是FF等标准浏览器中用来获取对象样式的函数,该函数返回的是一个CSS2Properties对象,此对象包括了元素的最终样式。该函数有两个参数,第一个为要获取样式的元素对象,第二个参数为伪元素,一般设为null. 该属性为只读
用法举例:var s= window.getComputedStyle(element,null).fontSize
DocumentFragment节点
DocumentFragment节点是一种特殊类型的节点,它自身不出现在文档中,只做为连续节点集合的临时容器,并允许将这些连续的节点作为一个对象来操作。当把一个DocumentFragment插入文档时(用appendChild(),insertBefore(),replaceChild()方法),插入的不是DocumentFragment,而是它里面包含的节点
示例: var f=document.createDocumentFragment(); //获取一个空的DocumentFragment对象
f.appendChild(element1) //给DocumentFragment添加节点
f.appendChild(element2) //给DocumentFragment添加节点
element3.appendChild(f) //把element1、element2作为一个整体插入element3
DocumentFragment对象的好处在于可以减少浏览器回流,提高效率
DOM (Document Object Model)文档对象模型的更多相关文章
- javascript之DOM(Document Object Model) 文档对象模型
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- JS--dom对象:document object model文档对象模型
dom对象:document object model文档对象模型 文档:超文本标记文档 html xml 对象:提供了属性和方法 模型:使用属性和方法操作超文本标记性文档 可以使用js里面的DOM提 ...
- DOM(Document Object Model)
DOM(Document Object Model): 结点的概念:整个文档就是由层次不同的多个节点组成,可以说结点代表了全部内容. 结点类型 1.元素结点 对于元素结点的n ...
- DOM document object model learn
DOM对W3C DOM而言,HTML文档中任何一样东西都是一个节点,而且节点之间是有层次的.如<p>I am a JavaScript hacker.</p>有两个节点,一个是 ...
- DOM - Document Object Model
Document Object Model
- XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。
XML DOM DOM 把 XML 文档视为一种树结构.通过这个 DOM 树,可以访问所有的元素.可以修改它们的内容(文本以及属性),而且可以创建新的元素.元素,以及它们的文本和属性,均被视为节点. ...
- BOM—Browser Object Model and DOM—Document Object Model
浏览器对象模型的内涵是每个页面都是一个window对象,而dom是document为基准的模型,而document与wimdow.document指向相同,所以可以这么理解,bom模型的定义是包括do ...
- JavaScript学习笔记7 之DOM文档对象模型
一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘 ...
- 前端-javascript-DOM(重点)文档对象模型
1.DOM概念-文档对象模型 // 什么是DOM ? /* Document Object Model 文档对象模型 面向对象: 三个特性 封装 继承 多态 一个对象: 属性和方法 说 万事万物皆对象 ...
随机推荐
- zabbix3.0 微信告警
首先需要申请一个企业号,其实公众号也可以,不过脚本不一样.而且公众号任何人都可以关注,有泄密的风险.企业号只有指定的人可以关注,安全性较高.申请企业号,需要一个绑定你本人开户银行卡的微信号. 申请网址 ...
- n+1 < n , are you sure?
密码终于找回了,原来是我邮箱把改密链接的邮件当垃圾邮件了-- 回到正题,这是道面试题,原话大致是这样的: n+1<n成立吗?请说明. 当时我听到这个题后直觉是成立的,但是想不到怎么回事,后来别人 ...
- 第十三章:降维:主成分分析PCA
- win10 上运行 curl_init() 函数一直报错的解决办法
[问题现象] 1.把 APACHE 的 ZIP 包解压到目录,比如 d:\apache24\ 2.把 PHP 的 ZIP 包解压到目录,比如:d:\php56\ apache 与 php 与 MySQ ...
- 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance
提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...
- Windows服务器安装配置PHP7.0环境图文教程
摘自http://www.111cn.net/phper/linux-php/109865.htm Windows服务器安装配置PHP7.0环境图文教程 www.111cn.net 更新:2016-0 ...
- oracle根据视图删除表
delete from t_fwaqjcjl where zcbm in (select zcbm from view_fwaqjcjl where 1=1 )
- C#多线程学习
一.线程的定义 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程 ...
- 用CSS3的transform来做一个立方体
有一次上数据结构课老师布置了一个用队列的思想通过js和Html来做一个“跳舞配对”的网页,当时那个跳舞的部分用了css3里面transform的相关属性做了个个让图片无限翻转的效果,可能正是由于这个效 ...
- 控制反转容器& 依赖注入模式 ---读感。
几个web框架 : sprint Avalon PicoContainerclass MovieLister MovieFinder finder = ServiceLocator.movieFind ...