JavaScript中DOM操作
一、DOM(Document Object Model文档对象模型)
可以将任何的HTML和xml文档描绘成一个由多层次节点构成的结构。
DOM规定:
-整个文档是一个文档节点
-每一个HTML标签都是元素节点
-HTML标签中的属性是属性节点(注意:DOM4中属性已经不属于节点,childNodes已经不包括属性节点)
-包含在HTML中的文字是文本节点(包括空格)
-注释内容是注释节点
二、元素节点操作
1、查找元素节点
1.1)查找自身
-
- id 找到 HTML 元素
- 通过标签名找到 HTML 元素
- 通过类名找到 HTML 元素
1.2)子节点
获取所有子节点:
-childNodes:包括文本节点
-children:不包括文本节点
获取第一个节点:
-firstChild:包括文本节点
-firstElementChild:不包括文本节点
获取最后一个子节点同理
1.3)父节点
相同点:两者输出结果相同
不同点:
parentNode:获取文档层次中的父节点
parentElement:获取对象层次中的父节点
1.4)兄弟节点
注意:childNodes与children;parentNode与parentElement中
parentNode和childNodes是符合W3C标准的,可以说比较通用。而另外两个只是IE支持,不是标准,Firefox就不支持
2、增加节点
创建元素:为避免频繁刷新DOM,可以先创造代码片段,完成所有节点操作之后统一添加到DOM中
-createElement(nodeName):创建一个新的节点,并将新节点返回.
参数:nodeName为必须参数,为标签名。会创建对应的节点
添加到节点树中
-父节点.appendChild(新节点):在父节点的内部最后,插入一个新节点。注意参数是节点。
-父节点.insertBefore(新节点,目标节点):在父节点中,将新节点插入到目标节点之前。
-源节点.cloneNode():克隆节点
*参数为空和false时浅克隆(不克隆子节点),参数为true,深克隆(克隆自身及其所有的子节点)
3、删除、替换节点
-父节点.replaceChild(新节点,旧节点):用新节点替换旧节点
-父节点.removeChild(子节点):移除指定的子节点
二、属性节点操作
属性就是对象身上所保存的数据,CSS样式就是这样的形式(键值对),所以操作属性节点其实就是对DOM元素的样式进行增删改查。
CSS样式有:行内样式(HTML标签中)、内联样式(页面中使用标签嵌入)、外部样式(引入的外部样式表)
1、点语法操作属性节点:可读可写
点语法可以获取的属性:行内样式、通过点语法动态添加的属性、
不可获取:外部样式、内联样式、行内自定义的样式
2、获取元素当前样式
1)window.getComputedStyle(要获取的样式的对象,伪元素:不使用设置为null).样式名
不支持IE8及以下,使用currentStyle代替。
2)元素.currentstyle.样式名
注意:以上方式是只读的,不能用于修改。如果要获取当前对象的颜色信息,IE返回的是16进制值
,如:#ffffff
,而其他浏览器返回的是rgb
值,
如:rgb(255,255,255)
3、使用attribute方式:该方式可读可写
注意:使用attribute方式添加的属性是作为元素节点里的attributes属性对象里的属性添加的,会显示在标签中。
通过点语法添加的属性不会显示在标签中。作为元素节点的一个属性添加到元素上面,不显示在行内
4、classList(H5新增)方式
该属性返回类名,用于元素属性的增删,是只读的,可以使用remove() add() 方法进行修改
三、文本节点
1、nodeValue:返回文本节点的内容,可读可写
innerHTML:返回元素节点下的HTML代码,可读可写。注意:文本节点会返回underfined
innerText:
区别:
textContent:它的内容则是innerHTML去除所有标签后的内容,它会将innerHTML中的转义字符(<、 什么的)进行换码,但是不对任何html标签进
行解释,而是直接剔除它们。它也不会对innerHTML中的文本按照HTML的方式进行格式转换,比如多个空格还会原原本本地保留,不会合并
为一个空格,换行符仍然存在(相反<br/>却不会导致换行)。
innerText:它的值是经过浏览器解释过的结果:它将元素的innerHTML换码、解释,最终显示出来,然后去除各种格式信息留下的纯文本。它会把
<br/>换成换行符,会将多个空格并成一个空格对待,而本来的换行符却并不会引起换行,IE会将其当作一个普通的单词边界(一般是空格)。
- textContent 是 Node 对象的属性;
- innerHTML 是 Element 对象的属性;
- innerText 是 HTMLElement 对象的属性;