共计 4564 个字符,预计需要花费 12 分钟才能阅读完成。
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> //body | |
window.onload = function(){ //script | |
var 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; | |
}; |