DOM
Document Object Model 文档对象模型
JS中通过DOM来对HTML文档进行操作。
只有了解了DOM就能够得心应手的操作WEB页面
文档
文档示意的就是整个HTML网页文档
对象
对象示意将网页中的每一个局部都转换为了一个对象。
模型
应用模型来示意对象之间的关系,这样不便咱们获取对象。
节点
节点:Node,形成网页的最根本的组成部分,网页中的每一个局部都能够称为一个节点
罕用节点分为四类
文档节点:整个HTML文档
元素节点:HTML文档中的HTML标签
属性节点:元素的属性
文本节点:HTML标签中的文本内容
比方:html标签,属性,文本,正文,整个文档等都是一个节点
尽管都是节点,然而实际上他们的具体类型是不同的
比方:标签咱们称为元素节点,属性称为属性节点,文本称为文本节点,文档称为文档节点。
节点的类型不同,属性和办法也都不尽相同。
事件的简介
事件,就是文档或浏览器窗口产生的一些特定的交互霎时
JavaScript与HTML之间的交互是通过事件实现的
对于Web利用来说,有上面这些代表性的事件:点击某个元素,将鼠标挪动至某个元素上方,按下键盘上某个键等等
//处理事件 //咱们能够在事件的对应属性中设置一些js代码//这样当事件被触发时,这些代码将会执行//这种写法咱们称为构造和行为耦合,不不便保护,**不举荐应用** <button id="btn" onclick="alert('厌恶,点我干嘛')">我是一个按钮</button><script type = "text/javascript"></script>
能够为按钮的对应事件绑定处理函数的模式来响应事件
这样当事件被触发时,其对应的函数将会被调用
获取对象
var btn = document.getElementById("btn");
绑定一个单机事件
像这种为单机事件绑定的函数,咱们称为单机响应函数
btn.onclick = function(){ alert("你还点");};
文档的加载
浏览器在加载一个页面时,是依照自上向下的程序加载的
读取到一行就运行一行,如果将script标签现到页面的上边,
在代码执行时,页面还没有加载DOM对象也没有加载,会导致无奈获取到DOM对象
将js 代码编写到页面下部就是为了能够在页面加载结束后在执行js代码
onload事件会在整个页面加载实现之后才触发
为window绑定一个onload事件
该事件对应的响应函数将会在页面加载实现之后执行
这样能够确保咱们的代码执行时所有的DOM对象曾经加载结束了
先加载后执行
<button id="btn">我是一个按钮</button> //bodywindow.onload = function(){ //scriptvar btn = document.getElementById("btn"); btn.onclick = function(){ alert("你还点"); };};
DOM查问
获取元素节点
通过document对象调用
1.getElementById()
通过id属性获取一个元素节点对象
2.getElementsByTagName()
通过标签名获取一组元素节点对象
3.getElementByName()
通过name属性获取一组元素节点对象
获取元素节点的子节点
通过具体的元素节点调用
1.getElementsByTagName()
办法,返回以后节点的指定标签名后辈节点
2.childNodes
属性,示意以后节点的所有子节点
3.firstChild
属性,示意以后节点的第一个子节点
4.lastChild
属性,示意以后节点的最初一个子节点
获取body
在document中有一个属性body,它保留的是body的援用
var body = document.body;
html根标签
document.documentElement保留的是html根标签
var html = document.doucumentElement;
依据元素的class属性值查问一组元素节点对象
gentElementsByClassName()能够依据class属性值获取一组元素节点对象,
然而该办法不反对IE8及以下的浏览器
var box1 = document.gentElementsByClassName("box1");
document.querySelector()
须要一个选择器的字符串作为参数,能够依据一个css选择器来查问一个元素节点对象
尽管ie8中没有gentElementsByClassName,然而能够应用document.querySelector()代替
应用该办法总会返回惟一的一个元素,如果满足条件的元素有多个,那么它只会返回第一个
document.querySelectorAll()
该办法与document.querySelector()用法相似,不同的是它会将查问的元素封装到一个数组
即便符合条件的元素只有一个,他也会返回数组
DOM查问
通过具体的元素节点来查问
元素.getElementsByTagName()
通过标签名查问以后元素的指定后辈元素
元素.childNodes
获取以后元素的所有子节点
会获取到空白的文本子节点
元素.children
获取以后元素的所有子元素
元素.firstChild
获取以后元素的第一个子节点
元素.lastChild
获取以后元素的最初一个子节点
元素.parentNode
获取以后元素的父元素
元素.previousSibling
获取以后元素的前一个兄弟节点
元素.nextSibling
获取以后元素的后一个兄弟节点
innerHTML和innerText
这两个属性并没有在DOM规范定义,然而大部分浏览器都反对这两个属性
两个属性作用相似,都能够获取到标签外部的内容,
不同是innerHTML会获取到html标签,而innerText会主动去除标签
如果应用这两个属性来设置标签外部的内容时,没有任何区别的
读取标签外部的文本内容
<h1>h1中的文本内容</h1> 元素.firstChild.nodeValue
document对象的其余的属性和办法
document.all
获取页面中的所有元素,相当于document.getElementsByTagName("*");
document.documentElement
获取页面中html根元素
document.body
获取页面中的body元素
document.getElementsByClassName()
依据元素的class属性值查问一组元素节点对象
这个办法不反对IE8及以下的浏览器
document.querySelector()
依据CSS选择器去页面中查问一个元素
如果匹配到的元素有多个,则它会返回查问到的第一个元素
document.querySelectorAll()
依据CSS选择器去页面中查问一组元素
会将匹配到所有元素封装到一个数组中返回,即便只匹配到一个
DOM批改
document.createElement()
能够依据标签名创立一个元素节点对象
document.createTextNode()
能够依据文本内容创立一个文本节点对象
父节点.appendChild(子节点)
向父节点中增加指定的子节点
父节点.insertBefore(新节点,旧节点)
将一个新的节点插入到旧节点的前边
父节点.replaceChild(新节点,旧节点)
应用一个新的节点去替换旧节点
父节点.removeChild(子节点)
删除指定的子节点
举荐形式:子节点.parentNode.removeChild(子节点)
DOM对CSS的操作
读取和批改内联款式
- 应用style属性来操作元素的内联款式
读取内联款式:
语法:
元素.style.款式名
例子:
元素.style.width
元素.style.height
留神:如果款式名中带有-,则须要将款式名批改为驼峰命名法
将-去掉,而后-后的字母改大写
比方:background-color --> backgroundColor
border-width ---> borderWidth
批改内联款式:
语法:
元素.style.款式名 = 款式值
通过style批改的款式都是内联款式,因为内联款式的优先级比拟高,
所以咱们通过JS来批改的款式,往往会立刻失效,
然而如果款式中设置了!important,则内联款式将不会失效。
读取元素的以后款式
失常浏览器
应用getComputedStyle()
这个办法是window对象的办法,能够返回一个对象,这个对象中保留着以后元素失效款式
- 参数: 1.要获取款式的元素 2.能够传递一个伪元素,个别传null
例子:
获取元素的宽度
getComputedStyle(box , null)["width"];
通过该办法读取到款式都是只读的不能批改
- IE8 - 应用currentStyle - 语法: 元素.currentStyle.款式名 - 例子: box.currentStyle["width"] - 通过这个属性读取到的款式是只读的不能批改
其余的款式相干的属性
留神:以下款式都是只读的
clientHeight
元素的可见高度,指元素的内容区和内边距的高度
clientWidth
元素的可见宽度,指元素的内容区和内边距的宽度
offsetHeight
整个元素的高度,包含内容区、内边距、边框
offfsetWidth
整个元素的宽度,包含内容区、内边距、边框
offsetParent
以后元素的定位父元素
离他最近的开启了定位的先人元素,如果所有的元素都没有开启定位,则返回body
offsetLeft offsetTop
以后元素和定位父元素之间的偏移量
offsetLeft程度偏移量 offsetTop垂直偏移量
scrollHeight scrollWidth
获取元素滚动区域的高度和宽度
scrollTop scrollLeft
获取元素垂直和程度滚动条滚动的间隔
判断滚动条是否滚动到底
垂直滚动条
scrollHeight - scrollTop = clientHeight
程度滚动
scrollWidth - scrollLeft = clientWidth
事件(Event)
事件对象
当响应函数被调用时,浏览器每次都会将一个事件对象作为实参传递进响应函数中,
这个事件对象中封装了以后事件的相干信息,比方:鼠标的坐标,键盘的按键,鼠标的按键,滚轮的方向。。
能够在响应函数中定义一个形参,来应用事件对象,然而在IE8以下浏览器中事件对象没有做完实参传递,而是作为window对象的属性保留
- 例子: 元素.事件 = function(event){ event = event || window.event; }; 元素.事件 = function(e){ e = e || event; };
事件的冒泡(Bubble)
事件的冒泡指的是事件向上传导,当后辈元素上的事件被触发时,将会导致其先人元素上的同类事件也会触发。
事件的冒泡大部分状况下都是无益的,如果须要勾销冒泡,则须要应用事件对象来勾销
能够将事件对象的cancelBubble设置为true,即可勾销冒泡
- 例子: 元素.事件 = function(event){ event = event || window.event; event.cancelBubble = true; };