JS基础之DOM文档对象模型

一、概念

浏览器已经为我们提供文档节点对象,这个对象是window属性,可以在页面中直接使用,文档节点代表的是整个网页。

二、事件

我们可以在事件对应的属性中设置一些JS代码,,但我们的事件被触发时,这些代码会执行
onclick  ondblclick   onmousemove....

事件:
- 用户和浏览器之间的交互行为,
比如:点击按钮,鼠标移动,关闭窗口。。。

三、文档的加载

浏览器在加载一个页面时,是按照自上而下的顺序加载的,读取一行就运行一行,如果将script标签写到页面的上边,在执行代码时。页面还没有加载。将JS代码编写到页面的下部就是为了,可以在页面加载完毕以后再执行JS代码

onload 事件会在整个页面加载完成之后才触发,为window绑定一个onload事件,该事件对应的影响函数将会在页面加载完成之后执行,这样可以确保我们的代码执行时所有的DOM对象已经加载完毕。

四、DOM查询节点

getElementByld()
- 通过id属性获取一个元素节点对象

getElementsByTagName()
- 通过标签名获取一个元素节点对象
这个方法会给我们返回一个类的数组对象,所有查询的元素都会封装到对象中
即使查询到的元素只有一个,也会封装到数组中返回

getElementsByName()
- 通过name属性获取一个元素节点对象

在document中有一个属性body,它保存的是body的引用

document.documentElement保存的是html根标签

document.all 代表页面中所有的元素

根据元素的class属性值查询一组元素节点对象
getElementsByClassName可以根据class属性值获取元素节点对象
但是该方法不支持IE8及一下浏览器

document.querySelector()
- 需要一个选择器的字符串作为参数,它可以根据一个CSS选择器来查询一个元素节点对象
- 虽然IE8中没有getElementsByTagName,但是可以使用document.querySelector()代替
- 使用该方法,它总会返回唯一的一个元素,如果满足条件的有多个,那么它只返回第一个

querySelectorAll() 该方法和querySelector()类似,不同的是它会将符合条件的元素封装到一个数组中返回,即使符合条件的元素只有一个,他也会返回数组

五、DOM操作节点

appendChild():把新的节点添加到指定节点

removeChild():删除子节点

replaceChild():替换子节点

insertBefore():在指定的子节点前面插入新的子节点

createElement():创建元素节点

createTextNode():创建文本节点

createAttribute():创建属性节点

getAttribute():返回指定的属性值

setAttribute():把指定的属性值设置或修改为指定的属性值

parentNode():以Node对象的形式返回指定节点的父节点,如果没有父节点则返回null

childNodes():以NodeList对象返回节点的子节点集合

attributes():元素的属性节点

nodeName():节点的名称

nodeValue:节点的值

nodeType():节点的类型

六、使用DOM读取样式

获取元素的当前显示样式
语法:
元素.currentStyle.样式名
alert(box1.currentStyle.backgroundColor);
它可以读取当前元素正在显示的样式
如果当前元素没有设置样式,则获取他的默认值

上面的方法只在IE中使用,其他浏览器都不支持

在其他浏览器中用 getComputedStyle()
这个方法是window的方法,所以直接使用
语法:
getComputedStyle().样式名

两个参数:
第一个:要获取的元素
第二个:可以传递一个伪元素,一般都传null

该方法会返回一个对象,对象中封装了当前元素对应的样式
可以通过对象.样式名来获取样式
如果获取的样式没有设置,则会获取到真实的值,而补水默认值
比如,没有设置width,他不会获取到auto,而是一个长度
但是该方法又不支持IE8及其以下的浏览器

通过currentStyle和getComputedStyle读取到的样式都是只读的
不能修改,如果要修改必须通过style属性

/*
定义一个函数,用来获取指定元素的当前样式
参数:
obj 要获取的元素
name 要获取的样式名
*/
function getStyle(obj , name) {

/*if(window.getComputedStyle){
//正常浏览器的方式,具有getComputedStyle方法
return getComputedStyle(obj,null)[name];
}else{
//IE8的方式,没有getComputedStyle方法
return obj.currentStyle[name];
}*/

return window.getComputedStyle?getComputedStyle(obj,null)[name]:obj.currentStyle[name];

/*if(obj.currentStyle){
return obj.currentStyle[name];
}else {
return getComputedStyle(obj,null)[name];
}*/

}

七、使用DOM操作CSS

通过JS修改元素的样式:
语法:
元素.style.样式名 = 样式值

注意如果CSS中含有-号 这种名称在js中是不合法的 如:background-color
需要将这种名字改为驼峰命名法
去掉 - , 然后将-后的字母大写

我们通过style属性设置的样式都是内联样式,而内联样式有较高的优先级,所以通过JS修改的样式往往会立即显示,但是如果在样式中写了!important,则此时样式会有最高的优先级,即使通过JS也不能覆盖样式,此时将会导致JS修改样式失效,尽量不要修改!important。

八、滚动条的样式操作

clientWidth
clientheight
这两个属性可以获取元素的可见高度和宽度
这些属性都是不带px的,返回都是一个数字,可以直接进行计算
会获取元素的宽度和高度,包括内容区和内边距
这些属性都是只读的,不能修改

offsetWidth
offsetHeight
- 获取元素的整个宽度和高度,包括内容区,内边距和边框

offsetParent
- 可以用来获取当前元素的定位父元素
- 会获取到离当前元素最近的开启了定位的祖先元素
- 如果所有的祖先元素都没有开启定位,则返回body

offsetLeft
- 当前元素相对于其定位父元素的水平偏移量
offsetTop
- 当前元素相对于其定位父元素的垂直偏移量

scrollWidth
scrollHeight

- 可以获取元素整个滚动区域的宽度和高度

scrollLeft
- 可以获取水平滚动条滚动的距离
scrollTop
- 可以获取垂直滚动条滚动的距离

当满足.scrollHeight - .scrollTop == .clientHeight
说明垂直滚动条,滚动到底

当满足.scrollWidth - .scrollLeft == .clientWidth
说明水平滚动条,滚动到底                                                                                                                                                                                                                                                                                                                                                                                                       当垂直滚动条到底时,表单项才可用
onscroll
- 该事件会在滚动条滚动的时候触发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值