一、DOM和BOM介绍
在JavaScript中,BOM(浏览器对象模型)和DOM(文档对象模型)是两个核心概念,它们分别提供了与浏览器窗口和文档交互的接口。
1、BOM(Browser Object Model)
作用
BOM提供了与浏览器窗口进行交互的对象和接口。通过BOM,我们可以控制浏览器窗口和框架,以及执行导航。
BOM的核心对象
BOM的核心对象是window,它代表了浏览器窗口,并且是一个全局对象,这意味着在全局作用域中声明的所有变量、函数和对象自动成为window对象的成员。
BOM的其他对象
如location(用于获取或设置窗口的URL)navigator(包含有关浏览器的信息)
history(提供与浏览器历史记录相关的功能)
screen(提供有关客户端屏幕的信息)等
DOM(Document Object Model)
文档对象模型,是w3c组织推荐的处理可拓展标记语言HTML或者XML的标准编程接口,W3c已经定义了一系列的dom接口
DOM树
文档:一个页面就是一个文档,DOM中使用document表示
元素:页面中所有标签都是元素,DOM中使用element表示
节点:网页中所有的内容都是节点(标签、属性、文本、注释等),DOM中使用node表示
DOM把以上内容都看做对象
获取元素
DOM获取页面元素的几种方式
根据id获取
使用getElementByID("id");
使用console.dir()可以打印我们获取的元素对象,更好的查看对象里面的属性和方法。
根据标签名获取
使用getElementsByTagName()方法可以返回带有指定标签的对象的集合
document.getElementsByTagName("标签名“)
注意:
1.因为得到的是一个对象的集合,所以我们想要操作里面的元素需要遍历。
2.得到元素对象是动态的。
通过HTML5新增方法获取
document.getElementsByClassName('类名'); //根据类名返回元素对象集合
document.querySelector('选择器') //根据指定选择器返回第一个元素对象
document.querySelectorAll('选择器') //根据指定选择器返回
注意:
querySelector和querySelector里面选择器需要加符号,比如document,querySelector('#nav');
特殊元素获取
获取body元素
document.body
//返回body元素对象
document.documentElement
//获取html元素对象
事件基础
事件概述
JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。
简单理解: 触发--- 响应机制。
网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个 事件,然后去执行某些操作。
事件三要素
1. 事件源 (谁)
2. 事件类型 (什么事件)
3. 事件处理程序 (做啥)
案例分析
1.获取事件源(按钮)
2.注册事件(绑定事件)
3.使用 onclick 编写事件处理程序,写一个函数弹出 alert 警示框
执行事件的步骤
1. 获取事件源
2. 注册事件(绑定事件)
3. 添加事件处理程序(采取函数赋值形式)
实现代码
var btn = document.getElementById('btn');
btn.onclick = function() {
alert('你好吗');
};
常见的鼠标事件
操作元素
JavaScript 的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容 、属性等。注意以下都是属性
改变元素内容
element.innerText
从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去掉
element.innerHTML
起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行
常用元素的属性操作
1. innerText、innerHTML 改变元素内容
2. src、href
3. id、alt、title
分时显示不同图片,显示不同问候语,根据系统不同时间来判断,所以需要用到日期内置对象 利用多分支语句来设置不同的图片 需要一个图片,并且根据时间修改图片,就需要用到操作元素src属性 需要一个div元素,显示不同问候语,修改元素内容即可
样式属性操作
我们可以通过 JS 修改元素的大小、颜色、位置等样式。
1. element.style 行内样式操作
2. element.className 类名样式操作
注意:
1. 如果样式修改较多,可以采取操作类名方式更改元素样式。
2. class因为是个保留字,因此使用className来操作元素类名属性
3. className 会直接更改元素的类名,会覆盖原先的类名。
节点操作
获取元素通常使用两种方式:
1. 利用 DOM 提供的方法获取元素
2. 利用节点层级关系获取元素
节点概述
网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM 中,节点使用 node 来表示。 HTML DOM 树中的所有节点均可通过 JavaScript 进行访问,所有 HTML 元素(节点)均可被修改,也可以创建或删除。
一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性。
元素节点 nodeType 为 1
属性节点 nodeType 为 2
文本节点 nodeType 为 3 (文本节点包含文字、空格、换行等)
我们在实际开发中,节点操作主要操作的是元素节点
节点层级
利用 DOM 树可以把节点划分为不同的层级关系,常见的是父子兄层级关系。
.1. 父级节点
node.parentNode
parentNode 属性可返回某节点的父节点,注意是最近的一个父节点
如果指定的节点没有父节点则返回 null
2. 子节点
parentNode.childNodes(标准)
parentNode.childNodes 返回包含指定节点的子节点的集合,该集合为即时更新的集合
注意:返回值里面包含了所有的子节点,包括元素节点,文本节点等。 如果只想要获得里面的元素节点,则需要专门处理。 所以我们一般不提倡使用childNodes
var ul = document. querySelector(‘ul’);
for(var i = 0; i < ul.childNodes.length;i++) {
if (ul.childNodes[i].nodeType == 1) {
// ul.childNodes[i] 是元素节点
console.log(ul.childNodes[i]);
}
}
3.兄弟节点
1. node.nextSibling nextSibling 返回当前元素的下一个兄弟元素节点,找不到则返回null。同样,也是包含所有的节点。
2. node.previousSibling previousSibling 返回当前元素上一个兄弟元素节点,找不到则返回null。同样,也是包含所有的节点。
4.创建节点
document.createElement('tagName') document.createElement() 方法创建由 tagName 指定的 HTML 元素。因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点。
5.添加节点
node.appendChild(child)
node.appendChild() 方法将一个节点添加到指定父节点的子节点列表末尾。类似于 CSS 里面的 after 伪元素。
node.insertBefore(child, 指定元素)
node.insertBefore() 方法将一个节点添加到父节点的指定子节点前面。类似于 CSS 里面的 before 伪元素。
6.删除节点
node.removeChild(child)
node.removeChild() 方法从 DOM 中删除一个子节点,返回删除的节点。
API
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。简单理解: API 是给程序员提供的一种工具,以便能更轻松的实现想要完成的功能
Web API
Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM )。 现阶段我们主要针对于浏览器讲解常用的 API , 主要针对浏览器做交互效果。
总结
1. API 是为我们程序员提供的一个接口,帮助我们实现某种功能,我们会使用就可以了,不必纠结内部如何实现
2. Web API 主要是针对于浏览器提供的接口,主要针对于浏览器做交互效果。
3. Web API 一般都有输入和输出(函数的传参和返回值),Web API 很多都是方法(函数)
4. 学习 Web API 可以结合前面学习内置对象方法的思路学习