赞
踩
作用:就是使用 JS 去操作 html 和浏览器
分类:DOM (文档对象模型)、BOM(浏览器对象模型)
DOM(Document Object Model–文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API
白话文:DOM是浏览器提供的一套专门用来 操作网页内容 的功能
DOM作用:
DOM树是什么
浏览器根据html标签生成的JS对象
DOM的核心思想
document 对象
<div>123</div>
<script>
const div = document.querySelector('div')
console.dir(div) // dom 对象
</script>
首先选中这个标签,跟 CSS选择器类似,选中标签才能操作查
找元素DOM元素就是利用 JS 选择页面中标签元素
根据CSS选择器来获取DOM元素(重点)
选择匹配的第一个元素
语法:document.querySelector('css选择器')
参数:包含一个或多个有效的CSS选择器字符串
返回值:CSS选择器匹配的第一个元素,一个HTMLElement对象。
选择匹配的多个元素
语法:document.querySelectorAll('css选择器')
参数:包含一个或多个有效的CSS选择器字符串
返回值:CSS选择器匹配的NodeList对象集合
document.querySelectorAll('ul li')
document.querySelectorAll('css选择器')
得到的是一个伪数组:
注意事项哪怕只有一个元素,通过querySelectAll()获取过来的也是一个伪数组,里面只有一个元素而已
其他获取DOM元素方法(了解)
// 根据id获取一个元素
document.getElementById('nav')
// 根据 标签获取一类元素 获取页面 所有d
ivdocument.getElementsByTagName ( 'div')
// 根据 类名获取元素 获取页面 所有类名为 w的
document.getElementsByClassName('w')
元素innerText 属性
const info = document.querySelector('.info')
// 获取标签内部的文字
console. Log(info. innerText)
// 添加/修改标签内部文字内容
info.innerText = '嗨喽,俺是刘德华~'
元素.innerHTML 属性
const info = document.querySelector('.info')
// 获取标签
console. Log(info. innerHTML)
// 添加/修改标签内容
info.innerHTML = '<strong>嗨喽,俺是刘德华~</striong>'
操作元素常用属性
// 1. 获取元素
const pic = document.querySelector('img')
// 2. 操作元素
pic.src = './images/liudehua.jpg'pic.title = '刘德华'
操作元素常用样式
通过style属性操作CSS
对象.style.样式属性 = 值
const box = document.querySelector('.box')
// 字符串
box.style.width = '500px'
// 小驼峰命名法
box.style.backgroundColor = 'hotpink'
box.style.border = '2px solid blue'
box.style.borderTop = '2px solid skyblue'
通过类名(className)操作CSS
元素.className = 'active'
通过classList操作类控制CSS
// 追加一个类
元素.classList.add('类名')
// 删除一个类
元素.classList.remove('类名')
// 切换一个类
元素.classList.toggle('类名')
使用className和classList的区别?
操作表单元素属性
表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框
正常的有属性有取值的 跟其他的标签属性没有任何区别
获取:DOM对象.属性名
设置:DOM对象.属性名 = 新值
表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示 如果为true 代表添加了该属性如果是false代表移除了该属性
自定义属性
标准属性:标签天生自带的属性比如class id title等,可以直接使用点语法操作比如: disabled、checked, selected
自定义属性:
<body>
<div data-id = "1" data-spm="buzhidao">1</div>
<div data-id = "2">2</div>
<div data-id = "3">3</div>
<script>
const one = document.querySelector('div')
console.log(one.dataset.id) //1
console.log(one.dataset.spm) //buzhidao
</script>
</body>
开启定时器
setInterval(函数, 时间)
function repeat() {console.log('前端程序员,就是头发多咋滴~~')}
//每隔一秒调用repeat 函数
setInterval(repeat, 1000)
注意:
关闭定时器
let变量名 = setInterval(函数,间隔时间)
clearInterval(变量名)
什么是事件?
什么是事件监听?
语法:元素对象.addEventListener('事件类型',要执行的函数)
事件监听三要素:
发展史:
鼠标触发
mouseenter 鼠 标 经 过
click 鼠标点击
mouseleave 鼠标离开
表单获得光标
focus 获得焦点
blur失去焦点
键盘触发
Keydown 键盘按下触发
Keyup键盘抬起触发
表单输入触发
input 用户输入事件
事件对象是什么
使用场景
语法:如何获取
元素.addEventListener('lick', function(e) {
})
部分常用属性
每个函数里都有this环境对象,普通函数里的this指向的是window
环境对象: 指的是函数内部特殊的变量 this,它代表着当前函数运行时所处的环境
作用:弄清楚this的指向,可以让我们代码更简洁
如果将函数A做为参数传递给函数B时,我们称函数A为回调函数
简单理解: 当一个函数当做参数来传递给另外一个函数的时候,这个函数就是回调函数
常见的使用场景:
function fn() {
console.log('我是回调函数...')
// fn传递给了setInterval, fn就是回调函数
setInterval(fn, 1000)
}
box.addEventListener('click', function () {
console.log('我也是回调函数')
})
事件流与两个阶段说明
事件捕获
DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
事件冒泡
阻止冒泡
事件对象.stopPropagation()
const fa = document.querySelector('.father')
const son = document.querySelector('.son')
document.addEventListener('click', function() {
alert('我是爷爷')
})
fa.addEventListener('click',function(){
alert('我是爸爸')
})
son.addEventListener('click',function(e){
alert('我是儿子')
//阻止流动传播
e.stopPropagation()
})
阻止默认行为
我们某些情况下需要阻止默认行为的发生,比如阻止链接的跳转,表单域跳转
e.preventDefault()
const a = document.querySelector('a')
a.addEventListener('click',function (ee) {
// 阻止默认行为 提交
ee.preventDefault()
})
解绑事件
addEventListener方式,必须使用:
const btn = document.querySelector('button') // btn.onclick = function(){ // alert('爷爷在此') // //L0 事件移除解绑 // btn.onclick = null // } // btn.addEventListener('click',function(){ // alert('爷爷在此') // }) function fn(){ alert('爷爷在此') } btn.addEventListener('click',fn) // L2 事件移除解绑 btn.removeEventListener('click',fn)
两种注册时间的区别
传统on注册(LO)
事件委托
事件委托是利用事件流的特征解决一些开发需求的知识技巧
const ul = document.querySelector('ul')
ul.addEventListener('click',function(ee){
// alert('我是你爹')
// this.style.color = 'red'
// console.log(ee.target) // 点击的对象
// console.dir(ee.target)
// ee.target.style.color = 'red'
// 需求:只有点击li才有效果
if(ee.target.tagName === 'LI'){
ee.target.style.color = 'red'
}
})
// 页面加载事件
widnow.addEventListener('load', function () {
// 要执行的操作
})
// 页面滚动事件
document.addEventListener('DOMContentLoaded', function () {
// 要执行的操作
})
// 页面滚动事件
window.addEventListener('scroll', function () {
// 要执行的操作
})
scrollLeft和scrollTop(属性)
crollTo
元素.scrolTo(x, y)
会在窗口尺寸改变的时候触发事件:
window.addEventListener('resize', function () {
// 执行的代码
})
检测屏幕宽度:
window.addEventListener('resize', function () {
let w = document.documentElement.clientWidth
console.log(w)
})
使用场景:
尺寸
位置
属性 | 作用 | 说明 |
---|---|---|
scrollLeft和scrollTop | 被卷去的头部和左侧 | 配合页面滚动来用,可读写 |
clientWidth 和 clientHeight | 获得元素宽度和高度 | 不包含border,margin,滚动条 用于js获取元素大小,只读属性 |
offsetWidth和offsetHeight | 获得元素宽度和高度 | 包含border、padding,滚动条等,只读 |
offsetLeft和offsetTop | 获取元素距离自己定位父级元素的左、上距离 | 获取元素位置的时候使用,只读属性 |
日期对象:用来表示时间的对象
作用:可以得到当前系统时间
实例化
const date = new Date()
const date = new Date('2008-8-8 08:00:00')
时间对象方法
目标:能够使用日期对象中的方法写出常见日期
使用场景:因为日期对象返回的数据我们不能直接使用,所以需要转换为实际开发中常用的格式
方法 | 作用 | 说明 |
---|---|---|
getFullYear() | 获得年份 | 获取四位年份 |
getMonth() | 获得月份 | 取值为 0~11 |
getDate() | 获取月份中的每一天 | 不同月份取值也不相同 |
getDay() | 获取星期 | 取值为 0~6 |
getHours() | 获取小时 | 取值为 0~23 |
getMinutes() | 获取分钟 | 取值为 0 ~59 |
getSeconds() | 获取秒 | 取值为 0~59 |
时间戳
const date = new Date()
console.log(date.getTime())
//无需实例化
console.log(+new Date())
//无需实例化
//但是只能得到当前的时间戳,而前面两种可以返回指定时间的时间戳
console.log(Date.now())
DOM节点
查找节点
关闭二维码案例:点击关闭按钮,关闭的是二维码的盒子,还要获取erweima盒子
思考:
节点关系:针对的找亲戚返回的都是对象
父节点查找:
子元素.parentNode
子节点查找:
父元素.children
兄弟关系查找:
增加节点
document.createElement('标签名')
父元素.appendChild(要插入的元素)
父元素.insertBefore(要插入的元素,在哪个元素前面)
元素.cloneNode(布尔值)
删除节点
父元素.removeChild(要删除的元素)
移动端也有自己独特的地方。比如触屏事件touch(也称触摸事件) , Android和IOS都有。
触屏touch事件 | 说明 |
---|---|
touchstart | 手指触摸到一个 DOM 元素时触发 |
touchmove | 手指在一个 DOM 元素上滑动时触发 |
touchend | 手指从一个 DOM 元素上移开时触发 |
const div = document.querySelector('div')
div.addEventListener('touchstart',function(){
console.log('开始摸')
})
div.addEventListener('touchmove',function(){
console.log('滑动了')
})
div.addEventListener('touchend',function(){
console.log('离开了')
})
BOM(浏览器对象模型)
定时器-延时函数
setTimeout(回调函数,等待的毫秒数)
JS执行机制
location对象
console.log(location.search)
console.log(location.hash)
location.reload(true)
navigator对象
//检测userAgent (浏览器信息)
!(function () {
const userAgent = navigator.userAgent
//验证是否为Android或iPhone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
///如果是Android或iPhone,则跳转至移动站点
if (android || iphone) {
location.href = 'http://www.baidu.com'
}
})()
history对象方法 | 作用 |
---|---|
back() | 可以后退功能 |
forward() | 前进功能 |
go(参数) | 前进后退功能 参数如果是 1 前进1个页面 如果是-1 后退1个页面 |
本地存储介绍
本地存储分类
localStorage.setItem(key, value)
localStorage.getItem(key)
localStorage.removeItem(key)
存储复杂数据类型
JSON.stringify(复杂数据类型)
JSON.parse(JSON字符串)
const obj = JSON.parse(localStorage.getItem('obj'))
利用 map() 和 join() 数组方法实现字符串拼接
const arr = ['red','green', 'blue']
const newArr = arr.map(function(ele,index){
console.log(ele) //素组元素
console.log(index) //索引号
return ele + '颜色'
})
console.log(newArr)
const arr = ['red','green', 'blue']
console.log(arr.join()) //red,green,blue
console.log(arr.join('')) //redgreenblue
console.log(arr.join('|')) //red|green|blue
const 变量名 = /表达式/
test()
方法 用来查看正则表达式与指定的字符串是否匹配regObj.test(被检测的字符串)
exec()
方法 在一个指定字符串中执行一个搜索匹配regObj.exec(被检测字符串)
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
边界符 | 说明 |
---|---|
^ | 表示匹配行首的文本(以谁开始) |
$ | 表示匹配行尾的文本(以谁结束) |
量词用来 设定某个模式出现的次数
量词 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
注意:逗号左右两侧千万不要出现空格
[] 匹配字符集合
[] 里面加上 - 连字符
console.log(/^[a-z]$/.test('c')) //true
腾讯QQ号:^[1-9][0-9]{4,}$(腾讯QQ号从10000开始)
[] 里面加上 ^ 取反符号
注意要写到中括号里面
.匹配除换行符之外的任何单个字符匹配除换行符之外的任何单个字符
预定义:指的是某些常见模式的简写方式。
预定义类 | 说明 |
---|---|
\d | 匹配0-9之间的任一数字,相当于[0-9] |
\D | 匹配所有0-9以外的字符,相当于[^0-9] |
\w | 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_] |
\W | 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_] |
\s | 匹配空格(包括换行符、制表符、空格符等),相等于[\t\r\n\v\f] |
\S | 匹配非空格的字符,相当于[^\t\r\n\v\f] |
日期格式:^\d{4}-\d{1,2}-\d{1,2}
修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等
语法:/表达式/修饰符
i是单词 ignore 的缩写,正则匹配时字母不区分大小写
g 是单词 global 的缩写,匹配所有满足正则表达式的结果
console.log(/a/i.test('a')) // true
console.log(/a/i.test('A')) // true
replace替换
字符串.replace(/正则表达式/, '替换的文本')
HTML学习
Web移动端学习
JS基础学习
Web API学习
JS进阶学习
ajax学习
Node.js与Webpack学习
Git学习
vue学习—更新中
小程序学习—学习中
XML教学视频
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。