- API(Application Programming Interface,应用程序编程接口) 是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
- Web API是浏览器提供的一套操作浏览器功能和页面元素的API(BOM 和 DOM)。
1. DOM 简介
1.1 什么是 DOM
文档对象模型
(Document Object Model,DOM),是W3C组织推荐的处理可扩展标记语言(HTML 或者 XML)的标准编程接口。- W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式。
1.2 DOM树
- 文档:一个
页面
就是文档,DOM中使用document
表示。 - 元素:页面中的所有
标签
都是元素,DOM中使用element
表示。 - 节点:网页中所有
内容
都是节点(标签
、属性
、文本
、注释
等),DOM中使用node
表示。 - DOM把以上内容都是看作对象。
2. 获取元素
2.1 如何获取页面元素
DOM 在我们实际开发中主要用来操作元素。
我们如何来获得页面中的元素呢?
获取页面中的元素可以使用以下几种方式:
- 根据ID获取
- 根据标签名获取
- 通过HTML5新增的方法获取
- 特殊元素获取
2.2 根据ID
获取
- 使用
getElementById()
方法可以获取带有ID的元素对象。 - 返回一个匹配到 ID 的DOM Element对象。若在当前Document下没有找到,则返回null。
console.dir(timer);
打印返回的元素对象,使得我们更好地查看里面的属性和方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="time">2019-9-9</div>
<script>
// 因为文档页面从上往下加载,而先得有标签,所以script写到标签下面
// get 获得 element 元素
// 参数id是大小写敏感的字符串
// 返回的是一个元素对象
var timer = document.getElementById('time');
console.log(timer);
console.log(typeof timer);
// console.dir 打印返回的元素对象,使得我们更好地查看里面的属性和方法
console.dir(timer);
</script>
</body>
</html>
2.3 根据标签名获取
- 使用
getElementsByTagName()
方法可以返回带有指定标签名的对象的集合。 - 返回的是获取过来元素对象的结合,以
伪数组
的形式存储的。
<body>
<ul>
<li>知否知否,应是绿肥红瘦1。</li>
<li>知否知否,应是绿肥红瘦2。</li>
<li>知否知否,应是绿肥红瘦3。</li>
<li>知否知否,应是绿肥红瘦4。</li>
<li>知否知否,应是绿肥红瘦5。</li>
</ul>
<script>
// 返回的是获取过来元素对象的结合,以伪数组的形式存储的
var lis = document.getElementsByTagName('li');
console.log(lis);
console.log(lis[0]);
for (var i = 0; i < lis.length; i++) {
console.log(lis[i]);
}
</script>
</body>
-
如果页面中没有这个元素,则返回的是一个空的伪数组的形式。
-
还可以获取某个元素(父元素)内部所有指定标签名的子元素。格式如下:
element.getElementsByTagName('标签名');
- 注意事项:父元素必须是单个对象(必须指明是哪一个元素对象),获取的时候不包括父元素自己。
<body>
<ul>
<li>知否知否,应是绿肥红瘦1。</li>
<li>知否知否,应是绿肥红瘦2。</li>
<li>知否知否,应是绿肥红瘦3。</li>
<li>知否知否,应是绿肥红瘦4。</li>
<li>知否知否,应是绿肥红瘦5。</li>
</ul>
<ol id='ol'>
<li>生僻字</li>
<li>生僻字</li>
<li>生僻字</li>
<li>生僻字</li>
<li>生僻字</li>
</ol>
<script>
// 返回的是获取过来元素对象的结合,以伪数组的形式存储的
var lis = document.getElementsByTagName('li');
console.log(lis);
console.log(lis[0]);
for (var i = 0; i < lis.length; i++) {
console.log(lis[i]);
}
// 返回伪数组[ol]
var ol = document.getElementsByTagName('ol');
console.log(ol);
// 父元素必须是单个对象(必须指明是哪一个元素对象)
console.log(ol[0].getElementsByTagName('li'));
// 方法二
var ol1 = document.getElementById('ol');
console.log(ol.getElementsByTagName('li'));
</script>
</body>
2.4 HTML5
新增获取元素方式
(1)getElementsByClassName();
- 新增类名获取元素方式。
- 根据类名返回元素对象集合,返回结果为一伪数组。
- 语法格式
<body>
<div class="box">盒子</div>
<div class="box">盒子</div>
<div class="nav">
<ul>
<li>首页</li>
<li>产品</li>
</ul>
</div>
<script>
// 1. getElementsByClassName 根据类名获得某些元素集合
var boxs = document.getElementsByClassName('box');
console.log(boxs);
</script>
</body>
(2)querySelector();
- 新增指定选择器获取元素方式,根据指定选择器返回第一个元素对象。
- 切记里面的选择器需要加符号 ,例如:.box 、#nav。
<body>
<div class="box">盒子</div>
<div class="box">盒子</div>
<div class="nav">
<ul>
<li>首页</li>
<li>产品</li>
</ul>
</div>
<script>
// 2. querySelector 返回指定选择器的第一个元素对象
// 切记里面的选择器需要加符号 .box #nav
var firstBox = document.querySelector('.box');
console.log(firstBox);
var nav = document.querySelector('#nav');
console.log(nav);
var li = document.querySelector('li');
console.log(li);
</script>
</body>
(3)querySelectorAll();
- 新增指定选择器获取元素方式,根据指定选择器返回所有元素对象。
<body>
<div class="box">盒子</div>
<div class="box">盒子</div>
<div class="nav">
<ul>
<li>首页</li>
<li>产品</li>
</ul>
</div>
<script>
// 3. querySelectorAll()返回指定选择器的所有元素对象
var allBox = document.querySelectorAll('.box');
console.log(allBox);
var lis = document.querySelectorAll('li');
console.log(lis);
</script>
</body>
2.5 获取特殊元素
- 获取
body元素
- 获取
html元素
<body>
<script>
// 1. 获取 body 元素
var bodyEle = document.body;
// 返回元素对象
console.log(bodyEle);
console.dir(bodyEle);
// 2. 获取 html 元素
var htmlEle = document.documentElement;
// 返回元素对象
console.log(htmlEle);
</script>
</body>
3 事件基础
- JavaScript 是我们有能力创建动态页面,而事件是可以被JavaScript侦测道德行为。简单理解为:触发响应的一种机制。
- 网页中的每个元素都可以产生某些可以触发JavaScript的事件,例如,我们可以在用户点击某按钮时产生一个事件,然后去执行某些操作。
3.1 事件三要素
- 事件是由三个部分组成:
事件源
、事件类型
、事件处理程序
。我们也称为事件三要素。 - 事件源:事件被触发的对象。
- 事件类型:如何触发事件。
- 事件处理程序:通过一个函数赋值的方式完成。
- 案例
<body>
<button id="btn">唐伯虎</button>
<script>
// 事件源
var btn = document.getElementById('btn');
// 事件类型 onclick 事件处理程序 funtion(){}
btn.onclick = function() {
alert('点秋香');
}
</script>
</body>
3.2 执行事件的步骤
获取事件源
注册事件(绑定事件)
添加事件处理程序(采取函数赋值形式)
鼠标事件 | 触发条件 |
---|---|
onlick | 鼠标点击左键触发 |
onmouseover | 鼠标经过触发 |
onmouseout | 鼠标离开触发 |
onfocus | 获得鼠标焦点触发 |
onblur | 失去鼠标焦点触发 |
onmousemove | 鼠标移动触发 |
onmouseup | 鼠标弹起触发 |
onmousedown | 鼠标按下触发 |