BOM与DOM操作
- BOM:浏览器对象模型(Browser Object Model) 用js代码操纵浏览器
- DOM:文档对象模型(Document Object Model) 用js代码操纵标签
BOM操纵
window对象
window.innerHeight //获取浏览器窗口高度
window.innerWidth //获取浏览器窗口宽度
//打开一个新的浏览器窗口
window.open('https://www.bilibili.com/',
'',
'height=400px,width=400px,top=400px,left=400px')
//第一个参数为网址,第二个参数写空即可,第三个参数写新窗口的大小跟打开位置
window.close() //关闭当前页面
window子对象
window.navigator.appName //查看浏览器名
window.navigator.appVersion //查看浏览器版本号
window.navigator.userAgent //用来表示当前是否是一个浏览器
window.navigator.platform //查看运行浏览器的操作系统
//window的子对象可以省略window不写——> navigator.userAgent
history对象
window.history.back() //使当前页面回退到上一次浏览的页面
window.history.forward() //使当前页面跳转到回退之前的页面
//就是浏览器窗口左上角的左右箭头的功能
location对象
window.location.href //获取当前浏览器页面的url
window.location.href = url //使当前浏览器页面跳转到指定url
window.location.reload() // 刷新当前页面
弹出框
//警告框
alert('这是警告框') //undefined
//确认框
confirm('这是确认框') //返回值true(确认)、false(取消)
//提示框
prompt('这是提示框','这是默认值') //返回值就是用户输入的内容
计时器
<!--
setTimeout() 只执行一次
setInterval() 每隔多少秒执行一次,循环执行
两种计时器均已毫秒为单位
let t1 = setTimeout(func,time) func代表函数 time代表定时器时间
let t2 = setInterval(func,time)
clearTimeout(t1)
clearInterval(t2)
清除两种定时器,必须要有变量指代的定时任务才能清除
-->
<script>
function func1() {
alert('111')
}
let t = setTimeout(func1,3000); //以毫秒为单位,三秒后自动执行函数func1
clearTimeout(t) //清除定时任务,必须要有变量指代的定时任务才能清除
function func2() {
alert('222')
}
function show() {
let t2 = setInterval(func2,3000); // 每3秒执行一次
function inner() {
clearInterval(t2) //清除定时器
}
setTimeout(inner,9000)
}
show()
</script>
DOM操纵
DOM的概念
/*
DOM树的概念:所有的标签都可以称之为节点
JavaScript 可以通过DOM创建动态的 HTML:
JavaScript 能够改变页面中的所有 HTML 元素
JavaScript 能够改变页面中的所有 HTML 属性
JavaScript 能够改变页面中的所有 CSS 样式
JavaScript 能够对页面中的所有事件做出反应
DOM操作需要用关键字document起手
*/
查找标签
/*
id查找 直接返回值
类查找 返回数组
标签查找 返回数组
*/
document.getElementById('标签的id') //返回一个值
document.getElementsByClassName('标签的class') //返回一个数组
document.getElementsByTagName('标签') //返回一个数组
let divEle = document.getElementsByTagName('div')[1] //根据情况来索引取值
间接查找
let pEle = document.getElementsByClassName('c1')[0] //根据情况来索引取值
pEle.parentElement //拿到当前节点的父节点(父节点->body->html)
pEle.parentElement.parentElement...
let divEle = document.getElementById('d1')
divEle.children //拿到当前节点下的所有子标签(返回一个数组)
divEle.children[0]
divEle.firstElementChild //获取当前节点下第一个子节点
divEle.nextElementSibling //当前节点同级的下一个节点
divEle.previousElementSibling //当前节点同级的上一个节点
节点操作
/*
通过DOM操作动态的创建img标签
*/
let imgEle = document.createElement('img') //创建标签
imgEle.src = '图片路径' //给标签设置默认属性,无法设置自定义属性
imgEle.setAttribute('username','yumi') //既可以设置自定义属性,又可以设置默认属性
let divEle = document.getElementById('d1')
divEle.appendChild(imgEle) //标签内部添加元素(追加再尾部)
/*
创建文本标签
*/
let aEle = document.createElement('a')
aEle.href = 'https://www.bilibili.com/'
aEle.innerText = 'B站' //给标签设置文本内容
let divEle = document.getElementById('d1')
let pEle = document.getElementById('d2')
divEle.insertBefore(aEle,pEle) //添加标签内容,指定位置添加
/*
额外补充
appendChild()
removeChild()
replaceChild()
setAttribute() 设置属性
getAttribute() 获取属性
removeAttribute() 移除属性
*/
// innerText与innerHTML的区别
/*
读的区别:
innerText:获取标签内所有的文本
innerHTML:获取内部文本以及所有标签
写的区别:
innerText:不识别html标签,直接作为一串的字符输出
innerHTML:能够始别html标签
*/
获取值操作
let seEle = document.getElementById('d2')
seEle.value //获取用户操作的数据(无法获取文件数据)
let fileEle = document.getElementById('d3')
fileEle.files //返回值为数组
fileEle.files[0] //获取文件数据
class、css操作
let divEle = document.getElementById('d1')
divEle.classList //获取当前标签所有的类属性
//["c1", "bg_red", "bg_green", value: "c1 bg_red bg_green"]
divEle.classList.remove('bg_red') //移除某个类属性
divEle.classList.add('bg_red') //添加类属性
divEle.classList.contains('c2') //验证该标签是否包含某个类属性
divEle.classList.toggle('bg_red') //类属性存在则删除,不存在则添加
//DOM操作css
let pEle = document.getElementsByTagName('p')[0]
pEle.style.color = 'skyblue' //以style为起手再进行css样式的修改
pEle.style.backgroundColor = 'yellow'
pEle.style.border = '3px solid red'
事件
<!--绑定事件的两种方法-->
<!--方法一:onclick-->
<button onclick='func1()'>按钮1</button>
<button id='btn2'>按钮2</button>
<scripe>
function func1() {
alert('按钮1的点击事件结果')
}
<!--方法二:查找标签-->
let btnEle = document.getElementById('btn2')
btnEle.onclick = function() {
alert('按钮2的点击事件结果')
}
</scripe>
<!--
script标签既可以放在head内也可以放在body内
通常都放在body内的最底部,确保在html部分代码全部加载完后在执行js代码
-->
案例一:开关灯
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1 {
height: 400px;
width: 400px;
border-radius: 50%;
background-color: pink;
}
.bg_blue {
background-color: lightskyblue;
}
</style>
</head>
<body>
<div id="d1" class="c1 bg_blue"></div>
<button id="d2">变色</button>
<script>
let divEle = document.getElementById('d1');
let btnEle = document.getElementById('d2');
btnEle.onclick = function () {
divEle.classList.toggle('bg_blue')
}
</script>
</body>
</html>
<input type='text' value='请输入名字:' id='d1'>
<script>
let inpEle = document.getElementById('d1');
// 获取焦点事件
inpEle.onfocus = function() {
inpEle.value = '' // 点value就是获取 等号赋值就是设置
}
//失去焦点事件
inpEle.onblur = function() {
inpEle.value = '请输入名字:'
}
</script>
案例三:定时器
<input type="text" id="d1">
<button id="d2">开始</button>
<button id="d3">结束</button>
<script>
let t = null;
function show() {
let inpEle = document.getElementById('d1');
let currenTime = new Date();
inpEle.value = currenTime.toLocaleString()
}
let startBtnEle = document.getElementById('d2');
let endBtnEle = document.getElementById('d3');
startBtnEle.onclick = function () {
if(!t) { // 限定开启定时器的个数唯一
t = setInterval(show, 1000)
}
};
endBtnEle.onclick = function () {
clearInterval(t);
t=null
}
</script>
案例四:省市联动
<span>省</span>
<select name="" id="d1">
<option value="" disabled selected>---请选择---</option>
</select>
<span>市</span>
<select name="" id="d2">
<option value="" disabled selected>---请选择---</option>
</select>
<script>
let proEle = document.getElementById('d1');
let cityEle = document.getElementById('d2');
data = {
"浙江": ["台州", "温州",'绍兴','杭州'],
"北京": ["朝阳区", "海淀区",'昌平区'],
"山东": ["威海市", "烟台市",'临沂市','青岛'],
'上海':['浦东新区','静安区','黄浦区','外滩'],
'深圳':['南山区','宝安区','福田区']
};
for (let key in data) {
// 1 创建option标签
let opEle = document.createElement('option');
// 2 设置文本
opEle.innerText = key;
// 3 设置value
opEle.value = key;
// 4 将创建好的option标签添加到第一个select中
proEle.appendChild(opEle)
}
proEle.onchange = function () {
let currentPro = proEle.value;
let cityList = data[currentPro];
cityEle.innerHTML = '';
for (let i=0; i < cityList.length; i++) {
let currentCity = cityList[i];
// 1 创建option标签
let opEle = document.createElement('option');
// 2 设置文本
opEle.innerText = currentCity;
// 3 设置value
opEle.value = currentCity;
// 4 将创建好的option标签添加到第一个select中
cityEle.appendChild(opEle)
}
}
</script>
window.onload事件
- 给页面上的元素绑定事件时,必须等文档加载完毕才能绑定事件
- window.onload事件在文件加载过程结束的时候触发。文档中的所有对象都位于DOM中,并且所有图像,脚本,链接和子框架都已完成加载。
- 注意:.onload()函数存在覆盖现象。