[TOC]
一、BOM
1. BOM 介绍
BOM全称为“Browser Object Model”,浏览器对象模型。提供一系列操作浏览器的属性和方法。核心对象为window对象,不需要手动创建,跟随网页运行自动产生,直接使用,在使用时可以省略书写。
2. window对象常用方法
1)网页弹框
alert() //警告框,一个参数,无返回值
prompt() //带输入框的弹框,可接收两个参数("提示信息",输入框中的默认值)
confirm() //确认框,返回布尔值
全局变量和全局函数都是window对象的属性和方法:
var a =100;
function a1(){
console.log("a1被调用");
}
console.log(a,window.a);//100,100
console.log(window)//window对象
a1();//a1被调用
window.a1()//a1被调用
2)窗口的打开和关闭
window.open("URL") //新建窗口访问指定的URL
window.close() //关闭当前窗口(关闭自身)
练习:给出确认框,点确定时打开目标文件,点击取消关闭当前网页.
r1=confirm("请确认")
if(r1){
window.open("http://www.baidu.com")
}else{
window.close()
}
3)定时器方法
- 间歇调用(周期性定时器)
作用:每隔一段时间就执行一次代码
开启定时器:
var timerID = setInterval(function,interval);
/*
参数 :
function : 需要执行的代码,可以传入函数名;或匿名函数
interval : 时间间隔,默认以毫秒为单位 1s = 1000ms
返回值 : 返回定时器的ID,用于关闭定时器
*/
关闭定时器 :
//关闭指定id对应的定时器
clearInterval(timerID);
示例1:
<body>
<button id="start">开启</button>
<button id="stop1">关闭</button>
<script>
start.onclick=function (){
//开启定时器
timer = setInterval(function (){
//打印日期时间
var date = new Date();
console.log(date);
},1000);//非阻塞
console.log("--------------")
};
stop1.onclick = function (){
//关闭间歇调用
clearInterval(timer)
}
//运行结果:
--------------
01_window.html:36 Tue Jul 02 2019 11:04:17 GMT+0800 (中国标准时间)
01_window.html:36 Tue Jul 02 2019 11:04:18 GMT+0800 (中国标准时间)
</script>
</body>
示例2:页面显示5秒倒计时
<body>
<h1 style="text-align: center;" id="show"></h1>
<script>
var i = 5;
show.innerHTML = i;
var timerID=setInterval(function (){
i--;
if(i!=0){
show.innerHTML = i;
}else{
show.innerHTML='倒计时结束!';
//停止定时器
clearInterval(timerID)
}
},1000);
</script>
</body>
- 超时调用(一次性定时器)
作用:等待多久之后执行一次代码
//开启超时调用:
var timerId = setTimeout(function,timeout);
//关闭超时调用:
clearTimeout(timerId);
示例:
<body>
<button id="start">开启</button>
<button id="stop1">关闭</button>
<script>
start.onclick = function (){
//开始超时调用
timer = setTimeout(function (){
console.log("超时调用")
}, 10000);
};
stop1.onclick=function (){
//关闭超时调用
clearTimeout(timer);
}
</script>
</body>
window 对象常用属性
window的大部分属性又是对象类型
1)history
作用:保存当前窗口所访问过的URL
属性 :
length 表示当前窗口访问过的URL数量
方法 :
back() 对应浏览器窗口的后退按钮,访问前一个记录
forward() 对应前进按钮,访问记录中的下一个URL
go(n) 参数为number值,翻阅几条历史记录,正值表示前进,负值表示后退
示例:
<button onclick="history.back()">返回</button>
<button onclick="history.forward()">前进</button>
<button onclick="history.go(1)">go(1)</button>
<button onclick="history.go(-1)">go(-1)</button>
历史记录的长度变化:
- 通过超链接在当前窗口访问其他URL,会造成历史记录增加;
- 前进和后退不会造成历史记录的变化,只是指针的移动;
- 历史记录的进出栈管理:
例如:A->B->C
从页面C后退至页面A,在A中通过超链接跳转至页面C
A->C
2)location
作用:保存当前窗口的地址栏信息(URL)
属性 :
href 设置或读取当前窗口的地址栏信息
方法 :
reload(param) 重载页面(刷新)
参数为布尔值,默认为false,表示从缓存中加载,设置为true,强制从服务器根目录加载
示例:
<button onclick="console.log(location.href);">获取href</button>
<button onclick="location.href='http://www.baidu.com';">设置href</button>
<button onclick="location.reload()">刷新</button>
3)document
提供操作文档HTML 文档的方法,,参见DOM
二、DOM节点操作
DOM全称为“Document Object Model”,文档对象模型,提供操作HTML文档的方法。(注:每个html文件在浏览器中都视为一篇文档,操作文档实际就是操作页面元素。)
1)节点对象
JS 会对html文档中的元素,属性,文本内容甚至注释进行封装,称为节点对象,提供相关的属性和方法。
2)常用节点分类
- 元素节点 ( 操作标签)
- 属性节点(操作标签属性)
- 文本节点(操作标签的文本内容)
3)获取元素节点
- 根据标签名获取元素节点列表
var elems = document.getElementsByTagName("");
例如:var list1 = document.getElementsByTagName("h1");
console.log(list1);
console.log(list1[0],list1[0].innerHTML);
//<h1>Fine,Thank you,and you</h1> "Fine,Thank you,and you"
/*
参数 : 标签名
返回值 : 节点列表,需要从节点列表中获取具体的元素节点对象
*/
- 根据class属性值获取元素节点列表
var elems = document.getElementsByClassName("");
/*
参数 : 类名(class属性值)
返回值 : 节点列表
*/
- 根据id属性值取元素节点
var elem = document.getElementById("");
/*
参数 : id属性值
返回值 : 元素节点
*/
- 根据name属性值取元素列表
var elems = document.getElementsByName("");
/*
参数 : name属性值
返回 : 节点列表
*/
注意:获取元素操作只能等待标签解析完毕后执行.
4)操作元素内容
元素节点对象提供了以下属性来操作元素内容
innerHTML : 读取或设置元素文本内容,可识别标签语法
innerText : 设置元素文本内容,不能识别标签语法
value : 读取或设置表单控件的值
示例:(取元素中的值,并呈现)
<input type="text" name="username"><button id="btn">提交</button>
<div id="show"></div>
<script>
var list3 = document.getElementsByName("username");
btn.onclick = function (){
//获取表单控件的值
console.log(list3[0].value);
show.innerHTML="<h1>"+list3[0].value+"</h1>"
}
</script>
5)操作元素属性
- 通过元素节点对象的方法操作标签属性
elem.getAttribute("attrname");//根据指定的属性名返回对应属性值
elem.setAttribute("attrname","value");//为元素添加属性,参数为属性名和属性值
elem.removeAttribute("attrname");//移除指定属性
- 标签属性都是元素节点对象的属性,可以使用点语法访问,例如:
h1.id = "d1"; //set 方法
console.log(h1.id); //get 方法
h1.id = null; //remove 方法
注意 :
- 属性值以字符串表示
- class属性需要更名为className,避免与关键字冲突,例如:
h1.className = "c1 c2 c3";
6)操作元素样式
- 为元素添加id,class属性,对应选择器样式
- 操作元素的行内样式,访问元素节点的style属性,获取样式对象;样式对象中包含CSS属性,使用点语法操作。
p.style.color = "white";
p.style.width = "300px";
p.style.fontSize = "20px";
注意 :
- 属性值以字符串形式给出,单位不能省略
- 如果css属性名包含连接符,使用JS访问时,一律去掉连接符,改为驼峰. font-size -> fontSize
7)元素节点的层次属性
- parentNode
获取父节点 - childNodes
获取子节点数组,只获取直接子节点(包含文本节点和元素节点) - children
获取子节点数组,只获取直接子元素,不包含间接元素和文本节点 - previousSibling
获取前一个兄弟节点(文本节点也可以是兄弟节点)
previousElementSibling 获取前一个元素兄弟节点 - nextSibling
获取后一个兄弟节点
nextElementSibling 获取下一个元素兄弟节点 - attributes
获取属性节点的数组
8)节点的创建,添加和删除
- 创建元素节点
var elem = document.createElement("标签名");//返回创建好的元素节点
- 节点的添加
添加和移除操作都必须由父元素执行,方法如下:
- 在父元素的末尾添加子节点
parendNode.appendChild(node);
- 指定位置添加
parendNode.insertBefore(newNode,oldNode);//在oldNode之前添加子节点
- 移除节点
parentNode.removeChild(node);//移除指定节点对象
三、DOM 事件处理
事件:指用户的行为或元素的状态。由指定元素监听相关的事件,并且绑定事件处理函数。
事件处理函数:元素监听事件,并在事件发生时自动执行的操作。
1) 事件函数分类
- 鼠标事件
onclick //单击
ondblclick //双击
onmouseover //鼠标移入
onmouseout //鼠标移出
onmousemove //鼠标移动
- 键盘事件
onkeydown //键盘按键被按下
onkeyup //键盘按键被抬起
onkeypress //字符按键被按下
- 文档或元素加载完毕
onload //元素或文档加载完毕
- 表单控件状态监听
onfocus //文本框获取焦点
onblur //文本框失去焦点
oninput //实时监听输入
onchange //两次输入内容发生变化时触发,或元素状态改变时触发
onsubmit //form元素监听,点击提交按钮后触发,通过返回值控制数据是否可以发送给服务器
2)事件绑定方式
- 内联方式
将事件名称作为标签属性绑定到元素上
例 :
<button onclick="alert()">点击</button>
- 动态绑定
获取元素节点,动态添加事件
例 :
btn.onclick = function (){
};
3)事件函数使用
- onload
常用于等待文档加载完毕再进行下一步操作 - 鼠标事件
- 表单事件
onchange: 监听输入框前后内容是否发生变化;也可以监听按钮的选中状态
onsubmit :表单元素负责监听,允许返回布尔值,表示数据是否可以发送;返回true,允许发送;返回false,不允许提交 - 键盘事件