DOM —— 文档对象模型
文档对象模型(document object model),一套操作页面元素的API。DOM可以把HTML看作是文档树,通过DOM提供的API可以对树上的节点进行操作。
DOM树
DOM 经常进行的操作
获取元素
调用document对象的getElementById方法根据id获取元素。
调用document对象的getElementByTagName方法根据标签名获取元素。返回值是同名元素对象组成的数组。该方法获取的元素是动态增加的。
调用document对象的getElementByName方法根据name获取元素。(IE和Opera会有兼容问题,建议使用选中id方法)
调用document对象的getElementByClassName方法根据类名获取元素。不支持IE8一下的浏览器。
调用document对象的querySelector方法根据选择器获取元素。通过css中的选择器去选取第一个符合条件的标签元素。
querySelectorAll可以选取所有符合条件的标签元素。
不支持IE8以下的浏览器
对元素进行操作
动态创建元素
事件
事件:在什么时候做什么事。
执行机制:触发响应机制
绑定事件/注册事件三要素:
①事件源:给谁绑定事件
②事件类型:绑定什么类型的事件,如:click单击事件
③事件函数:事件发生后执行什么,函数
事件监听
Javascript解析器会给有绑定事件的元素添加一个监听,解析器会一直监测这个元素,只有触发对应的绑定事件,会立刻执行事件函数。
常用监听方法:
①绑定HTML元素属性
②绑定DOM对象属性
获取标签内部内容的属性
表单元素属性
自定义属性操作
style样式属性操作
className类名属性操作
DOM节点操作
节点属性
nodeType 节点类型,属性值数字,共12种。
1 元素节点
2 属性节点
3 文本节点
nodeName 节点名称(标签名称),只读
nodeValue 节点值,返回或设置当前节点的值。元素节点的nodeValue始终是null
父子节点常用属性
兄弟节点常用属性
创建新节点
节点常用操作方法
parentNode
①parentNode.appendChild(child) : 将节点child添加到指定的父节点parentNode的子节点列表末尾
②parentNode.replaceChild(newChild,oldChild) :用指定的节点newChild替换当前节点的一个子节点oldNode,并返回被替换掉的节点
③parentNode.insertBefore(newNode,referenceNode) :在参考节点referenceNode之前插入一个拥有指定父节点的子节点,referenceNode必须设置,如果referenceElement为null则newNode将被插入到子节点末尾
④parentNode.removeChild(child) :移除当前节点的一个子节点child,这个节点必须存在于当前节点中
Node.cloneNode():克隆一个节点,可以选择是否克隆这个节点下的所有内容。参数为Boolean,表示是否采用深度克隆,true 则表示该节点的所有后代节点都会被克隆;false 表示只克隆该节点本身。默认值是true。
(注意克隆时,标签上的属性和属性值也会被复制,写在标签行内的绑定事件可以被复制,但是javaScript动态绑定的事件不会被复制)
Node.contains(child):传入节点是否为该节点的后代节点,返回布尔值
判断当前节点是否有子节点:
注册事件
element.addEventListenere(事件类型,事件函数),不支持IE9以下
同一个元素可以多次绑定事件监听,同一个事件类型可以注册多个事件函数
element.attachEvent(on+事件类型,事件函数) ,只支持IE10及以下的浏览器
综上,注册事件的兼容写法
自定义一个注册事件函数
//兼容所有浏览器的解除绑定事件的函数`
//参数:事件源,事件类型,事件函数
function deleEvent(ele,type,fun){
//浏览器能力检测
if(ele.removeEventListener){
ele.removeEventListener(type,fun);
}else if(ele.detachEvent){
ele.detachEvent("on" + type,fun);
}
}
移除事件
//兼容所有浏览器的绑定事件的函数
function addEvent(ele,type,fn){
//IE9及以上使用addEventListener ,IE9以下就使用addEvent
//判断浏览器 浏览器能力检测
if(ele.addEventListener){
ele.addEventListener(type,fn);
}else if(ele.attachEvent){
ele.attachEvent("on" + type,fn);
}
}
原文:https://www.cnblogs.com/dreamtown/p/14476625.html