dom
类型
- 文本节点
- 元素节点
- 注释节点
获取
document.getElementById(id)
document,getElementsByClassName(className)
HTMLCollection 类数组。在IE低版本(6、7、8)浏览器中不能通过这个方法获取元素document.getElementsByTagName(tagName)
HTMLCollection 类数组document.querySelector("#id/.className/tagName/tagName[property(也叫 attribute)]")
只选中第一个符合条件的元素,H5 新增方法document.querySelectorAll("#id/.className/tagName/tagName[property(也叫 attribute)]")
选中所有符合条件的元素,返回 NodeList,取得当时的节点,页面变化时不会改变,其他方法返回 HTMLCollection,会跟踪页面变化。H5 新增方法document.body
和document.ducumentElement
分别获取页面的 body 标签和 html 标签
注意 HTMLCollect 类数组,随页面元素改变而改变,没有 forEach 方法,NodeList 表示当时页面的元素,页面改变之后也不会变化,有 forEach 方法
forEach(function (item, index, array) {})
事件
事件源
引发后续事件的元素
事件类型
如 onclick、onmousemove、onmouseenter、onload(加载完成)等
事件处理程序
函数 ,如
1 | ele.onclick = function() { console.log(this) } |
1 | <div onclick="clickEvent(123)"> |
事件监听
1 | // addEventListener() 事件监听,可以绑定监听多个相同事件,如 |
操作元素
修改元素的 行内样式
1 | ele.style.backgroundColor = "red" |
一般用来获取元素的内联样式、外联样式(也能获取行内样式),只能获取,不能设置。。
1 | // 获取内联、外联样式 |
用父子兄弟关系获取节点
1 | ele.parentNode // 获取父节点 |
操作节点
创建节点
document.createElement("标签名")
插入节点
父节点.appendChild(新的子节点)
插入到父节点最后
父节点.insertBefore(新的子节点,作为参考的子节点)
插入到参考节点之前
1 | // 这也是原生方法,而且兼容 ie4+ |
删除节点
父节点.removeChild(子节点)
node1.pardentNode.removeChild(node1)
自己删自己
node1.remove()
删除节点 node1, IE10+
复制节点
要复制的节点.cloneNode(true)
默认为false,浅拷贝(不拷贝子节点,只拷贝自身); 为 true时,深拷贝(会拷贝子节点)。一般不复制有 id 的节点,因为会造成页面中有两个相同 id
nodeType 属性
nodeType == 1 元素节点,即标签
nodeType == 2 属性节点
nodeType == 3 文本节点
nodeType == 8 注释节点
nodeType == 9 整个文档的 DOM 根节点
节点的属性操作
获取节点的属性值
方法一
ele.属性
ele.[属性]
方法一操作的是 ele 对象,所以有部分属性无法读取,如 class 得写成 className 才能读取。
方法二
由于部分属性无法使用方法一获取,比如 class,所以可以用方法二
ele.getAttribute("属性名称")
ele.setAttribute("class", "div1")
这也是一个重写的方法,会把 class 属性(参数一)上所有的值都删掉,改成设置的值。 参数一为属性名称,参数二为要设置的值
方法二直接操作节点对象
节点内容操作
ele.innerHTML
可以将内容解析成带标签文本
ele.innerText
将内容当成字符串添加
H5拓展
获取元素
就是上面提到的两种支持 CSS 选择器的方法
类名操作
1 | ele.classList.add("类名") // 添加类名 |
定时器
1 | var n = 0 |