dom基础
这篇主要关于dom的一些基本知识,脚本化文档的内容,还包括一些window上的定时器方法
什么是dom
是Document Object Model的缩写,即文档对象模型。dom定义了表示和修改文档所需的对象、这些对象的行为和属性、这些对象之间的关系。是对html以及xml的标准编程接口
节点
- 节点有四个属性
- nodeName 元素的标签名,以大写形式表示只读
- nodeValue text节点或comment节点的文本内容,可读写
- nodeType 该节点的类型,只读
- attributes 节点的属性机顶盒
- 节点的类型
- 元素节点 1
- 属性节点 2
- 文本节点 3
- 注释节点 8
- document 9
- DocumentFragment 11
- 后面的数字是节点的 nodeType的值,通过这个值可以判断出节点的类型
- 节点的基本操作
- 遍历节点树
1.parentNode 2.childNodes 3.firstChild 4.lastChild 5.nextSibing 6.previousSibing - 增加节点
1.docuemnt.createElement() 2.document.createTextNode() 3.document.createComment() 4.document.createDocumentFragment() - 插入节点
1.parentnode.appendChild() 2.parentnode.insertBefore(a,b) a插到b前 - 删除节点
parent.removeChild() - 替换
parent.replaceChild(new,origin)
- 遍历节点树
- 元素节点
元素节点比较特殊,是我们主要操作的对象,它有一些其他节点没有的方法- 查看元素节点
- document代表整个文档
- document.getElementById() 查找相应Id的元素,在IE8以下的浏览器不区分id大小写,而且也返回匹配name属性的元素
- .getElementsByTageName() 按标签名匹配
- .getElementsByName() 只有部分标签name可以匹配
- .getElementsByClassName() 按类名匹配,ie8和ie8以下的ie中没有,可以同时多个class一起匹配
- .querySelector() css选择器,ie7和ie7之前没有,非实时,选出匹配的第一个元素
- .querySelectorAll() css选择器,ie7和ie7之前没有,非实时,选出匹配的所有元素
- 遍历元素节点
1.parentElement(ie不兼容) 2.children 3.node.childElementCount === node.children.length 子节点个数(ie不兼容) 4.firstElementChild 返回第一个子元素节点(ie不兼容) 5.lastElementChild 返回最后一个子元素节点(ie不兼容) 6.nextElementSibing/previousElementSibing(ie不兼容) - 元素节点的一些属性
- innerHTML
- innerText(火狐不兼容)/textContent(老版本ie不兼容)
- 元素节点的一些方法
- .setAttribute()
- .getAttribute()
- 查看元素节点
- dom元素节点上的一些属性
- 查看元素的尺寸 dom.offsetWidth,dom.offsetHeight
- 查看元素的位置 dom.offsetLeft,dom.offsetTop 对于没有定位父级的元素,返回相对文档的坐标;对于有定位的父级元素,返回相对于最近的有定位的父级的坐标 dom.offsetParent 返回最近的有定位的父级
- 节点有四个属性
window上面的一些方法
- 定时器(这个是window的方法)
- 创建定时器
- var timer = setInterval() 指定时间重复执行
- var timer = setTimerout() 指定时间执行一次
- 删除定时器
- clearInterval(timer)
- clearTimerout(timer)
- timer 的作用是为了删除的时候确定定时器
- 创建定时器
- 查看滚动条的距离
- window.pageXOffset/pageYOffset(ie8和ie8以下不兼容)
- document.body/documentElement.scrollLeft/scrollTop 兼容性比较混乱,用的时候可以取两个值相加,因为这两个不同时有值,为了兼容封装兼容性的写法,代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13function getScrollOffset(){
if(window.pageXOffset){
return {
x:window.pageXOffset,
y:window.pageYOffset
}
}else{
return {
x:document.body.scrollLeft+document.documentElement.scrollLeft,
y:document.body.scrollTop+document.documentElement.scrollTop
}
}
}
- 查看视口的尺寸
- window.innerWidth/innerHeight (ie8及ie8以下不兼容)
- document.documentElement.clientWidth/clientHeight (标准模式下,任意浏览器都兼容)
- document.body.clientWidth/clientHeight (适用于怪异模式下的浏览器)
封装方法如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18function getViewportOffset(){
if(window.innerWidth){
return{
width:window.innerWidth,
height:window.innerHeight
}
}else if(document.compatMode == 'CSS1Compat'){
return {
width:document.documentElement.clientWidth,
height:document.documentElement.clientHeight
}
}else{
return {
width:document.body.clientWidth,
height:document.body.clientHeight
}
}
}
- 查看元素的几何尺寸
- ele.getBoundingClientRect() 兼容性很好,该方法返回一个对象,对象里面有left,top,right,bottom等属性,其中还有width,height属性,但在老版本ie中不支持,而且,这个返回值并不是实时的
- 使滚动条滚动的方法
- scroll(),scrollTo(),scrollBy()
- 参数都是xy坐标,其中scrollBy方法是相对原来的位置进行的累加
- 定时器(这个是window的方法)