day55 js进阶
引子
- BOM
- 浏览器对象模型(Browser Object Model)
- js代码操作浏览器
- DOM
- 文档对象模型(Document Object Model)
- js代码操作html标签
一、BOM操作
1 window对象
// window对象指的是浏览器窗口
window.innerHeight // 当前浏览器窗口的高度
window.innerWidth // 当前浏览器窗口的宽度
window.open('https://www.mzitu.com/','','height=400px,width=400px,top=400px,left=400px')
// height和width是浏览器的高度和宽度,top和left是新窗口出来的位置
// 扩展父子页面通信 window.opener()
window.close()
2 window子对象
window.navigator.appName // 浏览器名称
>>> Netscape
window.navigator.appVersion // 浏览器版本
>>> "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
window.navigator.userAgent // 检验当前访问是否是一个浏览器(需要掌握)
>>> "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
// 当我们用代码去访问浏览器的时候是不会有userAgent的,所以最简单的反爬措施就是检验请求发起者的userAgent,在代码中加入userAgent配置就能破解这种反爬
window.navigator.platform // 当前硬件平台
>>> "Win32"
// 以上window子对象都可以省略window
3 history对象
window.history.back() 回退到上一页
window.history.forward() 前进到下一页
// 对应的就是你浏览器左上方的两个的箭头
4 location对象(掌握)
window.location.href // 获取当前页面的url
window.location.href = url // 跳转到指定的url
window.location.reload() // 刷新页面 浏览器左上方的小圆圈
5 弹出框
// 警告框
alert('你这个憨憨!')
// 弹出一个框,显示文字‘你这个憨憨!’ 有一个确定按钮
confirm('别瞎搞!')
// 弹出一个框,显示文字‘你这个憨憨!’ 有一个确定按钮,有一个取消按钮
// 按下确定会给页面返回true,按取消返回false
prompt('给你玩')
// 弹出一个框,显示文字‘你这个憨憨!’,下面有一个input框 有一个确定按钮,有一个取消按钮
// 按下确定会给页面返回输入的内容,按取消返回null
6 计时器相关
// 单次定时器
<script>
function fun1(){
alert('hz is dsb')
}
let t = setTimeout(func1,3000) // 以毫秒为单位,单次定时器
clearTimeout(t) // 取消定时任务,定时是异步,所以会直接取消
</script>
// 循环定时器
<script>
function func2(){
alter('hz is dsb')
}
function show(){
let t = setInterval(func2,3000) // 设定循环定时器,只要按掉就会重新计时
function inner(){
clearIntercal(t) // 清除定时器
}
setTimeout(inner,9000) // 9秒后触发清除定时器
}
show()
</script>
二、DOM操作
DOM树:页面里所有标签都可以称之为节点
js可以通过dom动态的创建HTML
- 能改变页面中所有的html元素
- 能改变页面中所有的html属性
- 能改变页面中所有的css样式
- 能对页面中的事件作出反应
ps:DOM操作需要用document起手
1 查找标签
1.1 直接查找(必须掌握)
// id查找
document.getElementById('d1') // 查找id为d1的标签
>>> <div id="d1">…</div> /// 返回的是id是d1的div标签
// 类查找
document.getElementsByClassName('c1') //查找所有继承了c1类的标签(可能是多个,所以放在一个数组里)
>>> HTMLCollection [p.c1] // 存放着很多个标签的数组
// 标签查找
document.getElementsByTagName('div') // 查找所有div标签(可能是多个,所以放在一个数组里)
>>>HTMLCollection(3)[div, div#d1, div, d1: div#d1]
当使用变量名指代标签对象的时候,一般书写成:
xxxEle
divEle
aEle
pEle
1.2 简介查找(熟悉)
let pEle = document.getElementsByClassName('c1')[0]
# 取父标签,可以多重取,返回的是父标签,html没有父标签返回的是空
pEle.parentElement
pEle.parentElement.parentElement
# 取子标签集合,所有的子标签放在一个数组内
pEle.children
# 同级别下一个
divEle.nextElementSibling
# 同级别上一个
divEle.previousElementSibling
2 节点操作
动态的创建标签,给标签添加属性,将标签添加到文本中
let imgEle = document.createElement('img') # 创建标签
imgEle.src = '1.png' # 给标签设置默认属性,自定义属性不能这样创建
imgEle.setAttribute('src','1.png')
imgEle.setAttribute('username','hz') # 用这种方式
let divEle = document.getElementById('d1') # 获取一个具体的标签对象
divEle.appendChild(imgEle) # 把img标签添加到div内部的最后
创建a标签,设置属性,设置文本,添加到指定标签上
let aEle = document.createElement('a') # 创建a标签
aEle.href = 'https://www.mzitu.com/'
aEle.innerText = '点我点我点我!' # 给标签设置文本内容
let divEle = document.getElementById('d1')
let pEle = document.getElementById('d2')
divEle.insertBefore(aEle,pEle) # 添加标签内容指定位置添加
# 在div内部,p标签之前
补充
"""
额外补充
appendChild()
removeChild()
replaceChild()
setAttribute() 设置属性
getAttribute() 获取属性
removeAttribute() 移除属性
"""
# innerText 和innerHTML的区别
divEle.innerText # 获取标签内部所有的文本
# 所以在设置的时候也只能设置文本,不会识别内部的标签语法
"id = d1 div2
div>p
div>span"
divEle.innerHTML # 获取标签内部的所有标签加文本
# 设置的时候会识别标签语法
" id = d1 div2
<p id="d2" class="c1">div>p</p>
<span>div>span</span>
"
divEle.innerText = '<h1>heiheihei</h1>' # 不识别html标签
divEle.innerHTML = '<h1>hahahaha</h1>' # 识别html标签
3 获取值操作
# 获取用户数据标签内部的数据
let seEle = document.getElementById('d2')
seEle.value # 获取的是标签内部的value值
"111"
let inputEle = document.getElementById('d1')
inputEle.value # 获取的是框里输入的值
"123"
# 文件获取
fileEle.value # 获取的只是文件的路径
"C:\fakepath\a.txt"
fileEle.files
FileList {0: File, length: 1} # 获取的是一个数组
fileEle.files[0] # 获取的是文件数据
File {name: "a.txt", lastModified: 1587783848425, lastModifiedDate: Sat Apr 25 2020 11:04:08 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 637, …}
4 class、css操作
let divEle = document.getElementById('d1')
divEle.classList # 获取标签的所有类属性,放在一个数组内
DOMTokenList(3) ["c1", "bg_red", "bg_green", value: "c1 bg_red bg_green"]
# 可以通过数组的方法对内部的属性进行增删改
divEle.classList.remove('bg_red') # 移除某个类属性
divEle.classList.add('bg_red') # 添加类属性
divEle.classList.contains('c1') # 验证是否包含某个类属性
true
divEle.classList.contains('c2')
false
divEle.classList.toggle('bg_red') # 有则删除无则添加
false
divEle.classList.toggle('bg_red')
true
divEle.classList.toggle('bg_red')
false
# DOM操作设置标签样式
let pEle = document.getElementsByTagName('p')[0]
pEle.style.color = 'red'
pEle.style.fontSize = '28px'
三、事件
<button onclick="func1()">点我</button>
<button id="d1">点我</button>
# 绑定事件的两种方法
<script>
// 第一种绑定事件的方式,在标签中 onclick属性调用写好的函数
function func1() {
alert(111)
}
// 第二种,找到指定标签设定它的onclick属性去调用特定函数
let btnEle = document.getElementById('d1');
btnEle.onclick = function () {
alert(222)
}
</script>
"""
script标签既可以放在head内 也可以放在body内
但是通常情况下都是放在body内的最底部
# 等待浏览器窗口加载完毕之后再执行代码
window.onload = function () {
// 第一种绑定事件的方式
function func1() {
alert(111)
}
// 第二种
let btnEle = document.getElementById('d1');
btnEle.onclick = function () {
alert(222)
}
}
day55 js进阶的更多相关文章
- 2. web前端开发分享-css,js进阶篇
一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...
- 【 D3.js 进阶系列 】 进阶总结
进阶系列的文章从去年10月开始写的,晃眼又是4个多月了,想在年前总结一下. 首先恭祝大家新年快乐.今年是羊年吧.前段时间和朋友聊天,聊到十二生肖里为什么没猫,我张口就道:不是因为十二生肖开会的时候猫迟 ...
- web前端开发分享-css,js进阶篇
一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践 经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无 从 ...
- JS 进阶知识点及常考面试题
将会学习到一些原理相关的知识,不会解释涉及到的知识点的作用及用法,如果大家对于这些内容还不怎么熟悉,推荐先去学习相关的知识点内容再来学习原理知识. 手写 call.apply 及 bind 函数 涉及 ...
- js进阶---12-11、jquery如何给动态创建出来的元素绑定事件
js进阶---12-11.jquery如何给动态创建出来的元素绑定事件 一.总结 一句话总结:通过事件委托的方式,通过on方法 1.on方法在事件绑定的时候,data方式带额外参数时,字符串参数和其它 ...
- js进阶---12-12、jquery事件委托怎么使用
js进阶---12-12.jquery事件委托怎么使用 一.总结 一句话总结:通过on方法(事件委托),给要绑定事件的元素的祖先绑定事件,从而达到效果. 1.事件委托是什么? 通过事件冒泡,让子元素绑 ...
- js进阶---12-10、jquery绑定事件和解绑事件是什么
js进阶---12-10.jquery绑定事件和解绑事件是什么 一.总结 一句话总结:on和off. 1.jquery如何给元素绑定事件? on方法 22 $('#btn1').on('click', ...
- Node.js进阶篇-koa、钩子函数、websocket、嵌入式开发
代码地址如下:http://www.demodashi.com/demo/12932.html 一.简介 koa是由Express原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的We ...
- 【 D3.js 进阶系列 — 4.0 】 绘制箭头
转自:http://www.ourd3js.com/wordpress/?p=660 [ D3.js 进阶系列 — 4.0 ] 绘制箭头 发表于2014/12/08 在 SVG 绘制区域中作图,在绘制 ...
随机推荐
- UniRx精讲(一):UniRx简介&定时功能实现
1.UniRx 简介 UniRx 是一个 Unity3D 的编程框架.它专注于解决时间上异步的逻辑,使得异步逻辑的实现更加简洁和优雅. 简洁优雅如何体现? 比如,实现一个"只处理第一次鼠标点 ...
- 手把手教你安装Ubuntu系统增强工具
如果你不安装VMware增强工具的话,VMware经常会给你弹出下图的界面,提示你安装增强工具. 那么VMware增强工具到底有啥特别之处咧?其实在VMware虚拟机中安装好VMwareTools之后 ...
- 使用CURL和火车头软件采集搜狐文章
直接上代码: //参数1:访问的URL,参数2:post数据(不填则为GET),参数3:提交的$cookies,参数4:是否返回$cookies function curl_request($url, ...
- win系统DOS批处理命令:每日根据定时计划,弹出相应的提醒
@echo off setlocal enabledelayedexpansion ::设置数据源 ::set DATASET=D:\soft\xinyu\xinyu.txt ::获取系统时间的星期值 ...
- tcpdump使用和抓包分析
参考资料: http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html tcpdump可以将网络中传送的数据包的“头”完全截获下来 ...
- PowerBuilder中DW如何手动触发事件
调用setitem默认不会触发itemchanged事件 如果想实现可手动触发itemchanged事件 事件格式如下: dw_list.event itemchanged( /*long row*/ ...
- ca77a_c++__一个打开并检查文件输入的程序_流对象_操作文件
/*ca77a_c++__一个打开并检查文件输入的程序 习题:8.13 8.14*/ /*ca77a_c++__一个打开并检查文件输入的程序 习题:8.13 8.14 */ #include < ...
- 本地yum源及更新
创建本地yumrepo源 概述 在生产环境中,由于网络环境隔离,很多内网机器,无法直接通过网络下载安装相关软件包,所以这个时候就需要在内网搭建一个yum源,然后通过下载将需要的软件包rpm下载下来,然 ...
- express 框架的使用方法
express 框架的使用方法: 第一步: 生成一个 (express)项目工程 命令提示框的指令是: express (文件名) express -e (文件名) 两段指令的 ...
- JavaWeb的登陆与注销功能
JavaWeb 登录与注销 大致流程 一般我们在Web应用中 登录页面一般是以 login.jsp的首页 大致流程如下: 当我们在前台写入用户名和密码之后,点击登录按钮 会将表单提交给一个LoginS ...