DOM

总结:

0.1 创建

1. document.write(几乎不用)
2. innerHTML
3. createElement
注:
1. document.write 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘
2. innerHTML 和createElement()不会导致页面全部重绘
3. innerHTML 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂
4. createElement() 创建多个元素效率稍低一点点,但是结构更清晰

0.2 增

1.appendChild
2.insertBefore

0.3 删

1.removeChild

0.4 改

1. 修改元素属性: src、href、title等
2. 修改普通元素内容: innerHTML 、innerText
3. 修改表单元素: value、type、disabled等
4. 修改元素样式: style、className

0.5 查

1. DOM提供的API 方法: getElementById、getElementsByTagName 古老用法 不太推荐
2. H5提供的新方法: querySelector、querySelectorAll 提倡
3. 利用节点操作获取元素: 父(parentNode)、子(children)、兄(previousElementSibling、
nextElementSibling) 提倡

0.6 属性操作

1.setAttribute:设置DOM属性
2.getAttribute:得到DOM属性
3.removeAttribute移除属性

0.7 事件操作

image.png

1.获取元素

1.1根据 ID 获取

document.getElementById('id');

1.2 根据标签名获取

document.getElementsByTagName('标签名');
还可以获取指定标签内的子元素
element.getElementsByTagName('标签名');

1.3通过 HTML5 新增的方法获取

1. document.getElementsByClassName(‘类名’);// 根据类名返回元素对象集合
2. document.querySelector('选择器'); // 根据指定选择器返回第一个元素对象
3. document.querySelectorAll('选择器'); // 根据指定选择器返回
querySelector 和 querySelectorAll里面的类和id选择器需要加符号,比如:document.querySelector('#nav');document.querySelector('.nav');
不加符号的默认为标签选择器

1.4 获取特殊元素(body,html)

1. doucumnet.body // 返回body元素对象
1. document.documentElement // 返回html元素对象

2.事件

2.1常见事件

image.png

3.操作元素

3.1改变元素内容

element.innerText//从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去掉
element.innerHTML//起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行

3.2常用元素的属性操作

1. innerText、innerHTML 改变元素内容
2. src、href
3. id、alt、title
直接使用element.操作,例如:element.id;  element.src

3.3 表单元素的属性操作

type、value、checked、selected、disabled
直接使用element.操作,例如:element.value;  element.disabled

3.4样式属性操作

我们可以通过 JS 修改元素的大小、颜色、位置等样式。
1. element.style 通过修改标签的行内样式操作
2. element.className 通过修改标签的类名样式操作
注意:
1.JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高
2.如果样式修改较多,可以采取操作类名方式更改元素样式。
3.通过className修改样式,需在style里提前设置好对应className的样式

3.5属性操作

3.5.1获取属性值
element.属性;  获取内置属性值(元素本身自带的属性)
element.getAttribute(‘属性’); 主要获得自定义的属性 (标准) 我们程序员自定义的属性
3.5.2 设置属性值
element.属性;  设置内置属性值 
element.setAttribute(‘属性’); 主要设置自定义的属性 (标准)使用:element.setAttribute(‘class’,'nav1')
3.5.3 移除属性
element.removeAttribute('属性');

3.6 H5自定义属性

3.6.1 设置H5自定义属性
H5规定自定义属性data-开头做为属性名并且赋值。
比如 
或者使用 JS 设置 element.setAttribute(‘data-index’, 2)
3.6.2 获取H5自定义属性
1. 兼容性获取 element.getAttribute(‘data-index’);
2. H5新增 element.dataset.index 或者 element.dataset[‘index’] ie 11才开始支持

4.节点操作

4.1获取节点

4.1.1父节点和子节点
父节点:
node.parentNode 返回最近的一个父节点,没有则返回null

子节点:
开发中使用一般使用以下方法返回子节点
第一个子元素节点,可以使用 parentNode.chilren[0]
最后一个子元素节点,可以使用 parentNode.chilren[parentNode.chilren.length - 1]


1. parentNode.childNodes(标准)(但一般不使用);返回包含指定节点的子节点的集合,该集合为即时更新的集合。
注:返回值里面包含了所有的子节点,包括元素节点,文本节点等。
2. parentNode.children(非标准)(经常使用);返回所有的子元素节点,并且只返回子元素节点,且无浏览器兼容问题。


firstChild 返回第一个子节点,找不到则返回null。同样,也是包含所有的节点。
3. parentNode.firstChild(一般不使用)
lastChild 返回最后一个子节点,找不到则返回null。同样,也是包含所有的节点。
4. parentNode.lastChild(一般不使用)

firstElementChild 返回第一个子元素节点,找不到则返回null。
5. parentNode.firstElementChild
lastElementChild 返回最后一个子元素节点,找不到则返回null。
6. parentNode.lastElementChild
注意:这两个方法有兼容性问题,IE9 以上才支持。
4.1.2 兄弟节点
1. node.nextSibling  返回当前元素的下一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。
2. node.previousSibling 返回当前元素上一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。

以下这两个方法有兼容性问题, IE9 以上才支持:
3. node.nextElementSibling 返回当前元素下一个兄弟元素节点,找不到则返回null。
4. node.previousElementSibling 返回当前元素上一个兄弟节点,找不到则返回null。

解决兼容问题方法:
function getNextElementSibling(element) {
var el = element;
while (el = el.nextSibling) {
if (el.nodeType === 1) {
return el;
} }
return null;
}

4.2 创建节点

document.createElement('tagName')

4.3 添加节点

1. node.appendChild(child)  将一个节点添加到指定父节点的子节点列表末尾。类似于 CSS 里面的
after 伪元素。
2. node.insertBefore(child, 指定元素) 将一个节点添加到父节点的指定子节点前面。类似于 CSS 里面的 before 
伪元素。

4.4 删除节点

node.removeChild(child) 方法从 DOM 中删除一个子节点,返回删除的节点。

4.5 复制节点(克隆节点)

node.cloneNode() 方法返回调用该方法的节点的一个副本。 也称为克隆节点/拷贝节点
注意:
1. 如果括号参数为空或者为 false ,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。
2. 如果括号参数为 true ,则是深度拷贝,会复制节点本身以及里面所有的子节点。

你可能感兴趣的:(DOM)