DOM基础
1. API接口
1.1.document.getElementById()
1 | document.getElementById() |
document.getElementById() 只有在作为 document
的方法时才能起作用,而在DOM中的其他 元素下无法生效。这是因为 ID 值在整个网页中必须保持唯一
1.2.document.getElementByTagName()
1 | document.getElementByTagName() |
1.3.document.getElementByClassName()
1 | document.getElementByClassName() |
document.getElementByTagName(),document.getElementByClassName()返回的是 元素对象的集合,以伪数组的形式存储。
2. H5新增获取元素方式
2.1.document.querySelector()
1 | document.querySelector() |
document.querySelector()返回指定选择器的第一份元素,切记括号里选择器需要加符号 .box #nav
2.2.document.querySelectorALL()
1 | document.querySelectorALL() |
返回指定选择器丽的全部元素对象的集合
1 | <body> |
3.事件基础
3.1执行事件的步骤
(1)获取事件源
(2)注册事件(绑定事件)
(3)添加时间处理程序(采用函数赋值形式)
3.2改变元素内容
1 | element.innerText //(非标准) |
从元素起始位置到终止位置,但他会去除html标签,同时空格和换行也会去掉
1 | element.innerHTML //(W3C标准 常用) |
包括html标签,同时保留空格和换行
两个属性可读可写,可以获取元素内容
案例:仿京东显示隐藏密码
1 | <body> |
3.3样式属性操作
1 | (1)element.style //行内样式操作 |
1 | element.style.width = '200px' |
js采用驼峰命名法
js修改style样式,产生的是行内样式,权重较高
3.4获取特殊元素(body html)
1 | (1)document.body //返回body元素对象 |
3.5排他思想
如果有同一组元素,我们想要某一个元素实现某种样式,需要用到循环的排他思想算法:
1.所有元素全部清除样式
2.给当前元素设置样式
3.注意顺序不能颠倒
1 | <button>按钮1</button> |
3.6自定义属性操作
1.获取属性值
1 | (1)element.属性 //获取内置属性(本身自带) |
2.设置属性值
1 | (1)element.属性 = '值' //设置内置属性值 |
1 | <body> |
3.移除属性
1 | element.removeAttribute('属性') |
4.H5新增获取元素自定义属性
1 | element.dataset.index 或 element.data['index'] // IE11才开始支持 |
1 | <div data-index="2">123</div> |
1.dataset是一个存储了全部data开头的自定义属性的集合
2.如果自定义属性有多个”-“连接,获取时采用驼峰命名法 data-list-name—>listaName
H5新特性自定义属性以data开头
4.节点操作(node)
4.1节点概述
一般地,节点至少拥有nodeType(节点类型)nodeName(节点名称)和nodeValue(节点 值)这三个基本特性
(1)元素节点 nodeType为1
(2)属性节点 nodeType为2
(3)文本节点 nodeType为3 //包含文字,空格,换行
4.2节点层级
(1)父级节点
1 | node.parentNode |
node.parentNode属性可返回指定节点最近的父节点,找不到父节点返回null
(2)子节点
1 | parentNode.childNodes(标准) |
parentNode.chileNodes返回指定节点的子节点的集合,该集合为即使更新的集合
注:返回值丽包含所有的子节点,包括元素节点,文本节点,如果想要获取里面的元素节点,需要经过专门的处理,所以一般不用childNodes
处理方式:
1 | <body> |
1 | parent.children //(非标准 常用) |
//是一个只读属性,只返回子节点元素
1 | parentNode.firstElementChild |
//返回第一个元素节点,找不到返回null
1 | parentNode.lastElementChild |
//返回最后一个子节点
parentNode.firstElementChild和parentNode.lastElementChild有兼容问题,IE9才支持
(3)兄弟节点
1 | node.nextElementSibling |
//返回指定元素下面的兄弟元素节点,找不到返回null
1 | node.previousElementSibling |
//返回指定元素节点的上一个兄弟节点
node.nextSibling和node.previousSibling获取全部节点(不常用)
4.3创建节点
(1)创建节点
1 | document.createElement('tagName') |
//创建节点有tagName指定的HTML元素
//元素是根据我们的需求动态生成,称为动态创建元素节点
(2)添加节点
1 | node.appendChild(child) |
//将创建的节点添加到父节点的节点末尾
1 | node.insertBefore(child, 指定元素) |
//将创建的节点添加到父节点指定节点的前面
1 | <body> |
4.4删除节点
1 | node.removeChild(child) |
node.removeChild(child)方法从DOM中删除一个子节点,返回删除的节点
4.5复制节点(克隆节点)
1 | node.cloneNode() |
node.cloneNode()方法返回调用该方法的一个副本。也称为克隆节点/拷贝节点,如果括号里的参数为空或者false,则是浅拷贝,即只克隆复制节点的本身,不克隆里面的子节点。如果括号里的参数是true,则是深拷贝,会复制节点本身以及里面所有的子节点。
1 | <body> |
5.DOM操作汇总
创建
1 | document.write |
增
appendChild
insertBefore
删
removeChild
改
主要修改DOM元素的属性,DOM元素的内容,属性,表单值等
- 修改元素属性:src, href,title等
- 修改元素内容:innerText,innreHTML
- 修改表单元素:value,type,disabled
- 修改元素样式:style,className
查
主要获取查询dom的元素
- DOM提供的API方法:getElementById, getElementByTagName(古老的方法,不推荐使用)
- H5提供的新方法:querySelector,querySelectorAll(提倡)
- 利用节点操作获取元素:父(parentNode),子(children),兄(previousElementSibling, nextElementSbling)提倡
属性操作
主要针对自定义属性
- setAttribute:设置自定义属性值
- getAttribute:获取自定义的属性值
- removeAttribute:移除属性