DOM文档对象模型
DOM
全称Document Object Model 文档对象模型
- JS通过DOM来对HTML文档进行操作
- 文档
- 表示的就是整个HTML网页文档
- 对象
- 表示将网页的每个部分都转换为一个对象
- 模型
- 使用模型来表示对象之前的关系,这样方便我们获取对象
节点(Node)
是构成HTML文档最基本的单元
四类:
- 文档节点: 整个HTML文档
- 元素节点: HTML文档中的HTML标签
- 属性节点: 元素的属性
- 文本节点: HTML标签的文本内容
- 获取节点
- 浏览器已经为我们提供文档节点对象 ,这个对象是Window属性,可以在页面中直接使用,
- 文档节点代表的是整个网页
- document.getElementById()
事件
就是文档或浏览器窗口中发生的一些特定交互瞬间
- JavaScript和HTML之间的交互式通过事件实现的
- 代表性事件有: 点击某个元素, 将鼠标移动到某个元素上面
DOM查询
获取元素节点,通过document对象调用
- getElementById() 通过id属性获取一个元素节点对象
- getElementsByName 通过name属性获取一组元素节点对象
- getElementsByTagName 通过标签名获取一组元素节点对象
通过具体元素节点调用
- getElementsByTagName() 方法,返回当前节点的指定标签名后代节点
- childNodes 属性,表示当前节点的所有子节点
- firstChild 属性,表示当前节点的第一个子节点
- lastChild 属性,表示当前节点的最后一个子节点
- parentNode 属性,表示当前节点的父节点
- previousSibling 属性,表示当前节点的前一个兄弟节点
- nextSibling 属性,表示当前节点的后一个兄弟节点
其他查询方法:
- document.body 获取body
- document.documentElement 获取HTML
- document.all 所有节点
- document.getElementsByClasssName 根据class属性值查询一组节点对象,不支持IE8以下
- document,querySelector() 根据一个选择器的字符串作为参数,可以根据一个css选择器来查询一个元素节点对象, 使用该方法只返回符合的第一个, IE8也可用
- document,querySelectorAll() 该方法与document,querySelector() 用法一样,只是它会将 所有符合对象封装到一个数组里面
dom增删改
- appendChild() 插入子节点
- replaceChild() 替换节点
修改样式
内联样式
语法: 元素.style.样式名 = 样式值
- 如果CSS样式名含有-, 要改成驼峰命名法,如: background-color 要改成: backgroundColor
- 我们通过style修改的属性设置的样式都是内联样式,因为具有较高优先级,所以修改后往往会立即显示,
- 但是,如果样式中写有!important,则样式会有最高优先级,修改样式不会覆盖
- 通过style只是读取内联样式,样式表中的读取不到
获取当前显示的样式
语法: 元素.currentStyle.样式名
- 只是IE浏览器支持,其他浏览器不支持
语法:getComputedStyle()
- 这个方法来获取元素的当前样式,这个是Windows的方法,直接使用
- 需要两个参数:
- 第一个,需要获取样式的元素
- 第二个,可以传递一个伪元素,一般都传null
- 该方法获取的是一个对象,封装了所有的样式
- 可以通过 对象.样式名 来读取样式
- 如果样式没有设置,获取到的是真实值而不是默认值(比如width获取的是真实数值,而不是auto)
- IE8以下不支持
样式属性其他方法:(这些是只读的,不能用于修改样式)
- clientWidth /clientHeight 获取元素可见宽度/高度,包括内容区和内边距
- 这两个属性都是不带px的,返回的是数字,可以直接进行计算
- offsetWidth/offserHeight 获取元素的整个宽度和高度,包括内容区,内边距,和边框
- offsetParent 获取当前元素的最近的定位父元素
- offsetLeft/offsetTop 当前元素相对于其定位父元素的水平/垂直偏移量
- scrollWidth/scrollHeight 获取元素整个滚动区域的宽度/高度
- scrollLeft/scrollTop 可以获取水平/垂直滚动条的滚动距离
<script type="text/javascript"> //哪个元素 //哪个样式 function getStyle(obj, attr) { if(obj.currentStyle) { return obj.currentStyle[attr]; } else { return getComputedStyle(obj, false)[attr]; } } window.onload=function () { var oDiv=document.getElementById('div1'); alert(getStyle(oDiv, 'backgroundColor')); } </script>
//获取样式简洁版 function getStyle(obj, attr) { return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, false)[attr]; }