Web API BOM DOM
Web API介绍
API的概念
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
- 任何开发语言都有自己的API
- API的特征输入和输出(I/O)
- API的使用方法(console.log(‘adf’))
Web API的概念
浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM)
掌握常见浏览器提供的API的调用方式
JavaScript的组成
[外链图片转存失败(img-txN6WH7e-1569329319475)(media/QQ图片20170810172512-2357176615.png)]
ECMAScript - JavaScript的核心 es5 es6
定义了JavaScript 的语法规范
JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关
BOM - 浏览器对象模型 brower Object Model
一套操作浏览器功能的API
通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等
DOM - 文档对象模型
一套操作页面元素的API
DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作
DOM
DOM的概念
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言(html)标准编程接口。它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构,DOM(是一种基于树的API文档,它要求在处理过程中整个文档都表示在存储器中。
DOM又称为文档树模型
[外链图片转存失败(img-AwX8vSxs-1569329319479)(media/1497154623955.png)]
- 文档:一个网页可以称为文档
- 节点:网页中的所有内容都是节点(标签、属性、文本、注释等)
- 元素:网页中的标签
- 属性:标签的属性
DOM经常进行的操作
- 获取元素
- 对元素进行操作(设置其属性或调用其方法)
- 动态创建元素
- 事件(什么时机做相应的操作)
获取页面元素
为什么要获取页面元素
例如:我们要页面元素隐藏/显示,需要现获取对应的元素,才能进行后续操作
根据id获取元素
var div = document.getElementById("id2");
当id重名的时候,会获取第一个,id有唯一性的
根据标签名获取元素
//标签名获取元素
var div = document.getElementsByTagName("div")[5];
alert(div);
根据name获取元素*
// 通过name来获取
var names = document.getElementsByName('n');
for (var i = 0; i < names.length; i++) {
alert(names[i]);
}
alert(names);
根据类名获取元素*
// 通过类名
var mains = document.getElementsByClassName("main");
alert(mains);
根据选择器获取元素*
// 根据选择器获取元素
var id1 = document.querySelector('#id1');
alert(id1);
var mains = document.querySelectorAll('.main');
alert(mains);
事件
事件:触发-响应机制
事件三要素
- 事件源:触发(被)事件的元素
- 事件名称: click 点击事件
- 事件处理程序(回调函数):事件触发后要执行的代码(函数形式)
事件的基本使用
案例
- 点击按钮切换图片
属性操作
非表单元素的属性
href、title、id、src、className
var link = document.getElementById("link");
console.log(link.href);
案例:
点击按钮显示隐藏div
-
innerHTML和innerText
-
HTML转义符
" "
' '
& &
< < // less than 小于
> > // greater than 大于
空格
© ©
表单元素属性
- value 用于大部分表单元素的内容获取(option除外)
- type 可以获取input标签的类型(输入框或复选框等)
- disabled 禁用属性
- checked 复选框选中属性
- selected 下拉菜单选中属性
案例
- 给文本框赋值,获取文本框的值
自定义属性操作
- getAttribute() 获取标签行内属性
- setAttribute() 设置标签行内属性
- removeAttribute() 移除标签行内属性
- 与element.属性的区别: 上述三个方法用于获取任意的行内属性。
样式操作
- 使用style方式设置的样式显示在标签行内
类名操作
- 修改标签的className属性相当于直接修改标签的类名
案例
- 图片切换二维码案例
创建元素的三种方式
document.write()
document.write('新设置的内容<p>标签也可以生成</p>');
innerHTML
var box = document.getElementById('box');
box.innerHTML = '新内容<p>新标签</p>';
document.createElement()
var div = document.createElement('div');
document.body.appendChild(div);
节点操作
节点属性
模拟文档树结构
[外链图片转存失败(img-boDMMEnY-1569329319481)(media/1497165666684.png)]
事件详解
注册/移除事件的三种方式
var box = document.getElementById('box');
box.onclick = function () {
console.log('点击后执行');
};
box.onclick = null;
box.addEventListener('click', eventCode, false);
box.removeEventListener('click', eventCode, false);
box.attachEvent('onclick', eventCode);
box.detachEvent('onclick', eventCode);
function eventCode() {
console.log('点击后执行');
}
常用的鼠标和键盘事件
- onmouseup 鼠标按键放开时触发
- onmousedown 鼠标按键按下触发
- onmousemove 鼠标移动触发
- onkeyup 键盘按键按下触发
- onkeydown 键盘按键抬起触发
下面是今天做的作业
1.寻找数组的每个出现的位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var arr = ["c", "a", "z", "a", "x", "a"] ;
for (var i = 0 ; i < arr.length ; i++) {
if (arr[i] == 'a' ) {
console.log(i+1);
}
}
</script>
</head>
<body>
</body>
</html>
2.将一个字符串数组输出为竖线分割的形式。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var str = ['1','2','3','4','5'] ;
var stri = str[0];
for(var i = 1 ; i <= str.length-1;i++) {
stri += '|' + str[i];
}
console.log(stri);
</script>
</head>
<body>
</body>
</html>
3.工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过2000的删除
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var numbers = [1500, 1200, 2000, 2100, 1800] ;
var xin = numbers[0] ;
for ( var i = 1 ; i < numbers.length; i++) {
if (numbers[i] <= 2000) {
xin += ',' + numbers[i] ;
}
}
console.log(xin);
</script>
</head>
<body>
</body>
</html>
4.模拟实现max(),min()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function max(n,m) {
var max = 0 ;
if( n > m ){
max = n ;
}
else {
max = m ;
}
return max ;
}
function min(a,b) {
var min = 0 ;
if( a > b ){
min = b ;
}
else {
min = a ;
}
return min;
}
console.log(max(10,20));
console.log(min(10,20));
</script>
</head>
<body>
</body>
</html>
5.随机生成rgb颜色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var r = parseInt(Math.random(0,1)*255);
var g = parseInt(Math.random(0,1)*255);
var b = parseInt(Math.random(0,1)*255);
var rgb = r + ','+ g + ',' +b;
console.log(rgb);
</script>
</head>
<body>
</body>
</html>
6.求1!+2!+3!-------n!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
function jiechen(n){
var sum = 0 ;
var temp = 1 ;
for(var i = 1 ; i <= n; i++) {
temp = temp * i ;
sum += temp;
}
return sum ;
}
console.log(jiechen(5));
</script>
</head>
<body>
</body>
</html>
7.求素数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
function sushu(n) {
var sushu = true ;
for (var i = 2 ; i <= n ; i++) {
if ( n & i == 0 ) {
sushu = false ;
}
return sushu ;
}
console.log(sushu(19));
}
</script>
</head>
<body>
</body>
</html>