Web API

1.获取元素

语法:

document.querySelsctor('css选择器')

只能获取符合条件的第一个元素,可以对其修改

document.querySelsctorALL('css选择器')

可以获取符合条件的所有元素,得到的是伪数组,需要遍历得到每一个元素

2.操作元素内容

语法:

元素.innerText =

只能识别文本,不能解析标签

元素.innerHTML =

能是被文本,也能解析标签

3.操作元素属性
3.1 操作元素常用属性

语法:对象.属性 = 值

实例:

// 获取元素
const pic = document.querySelector('img)
// 操作元素
pic.src = '图片.jpg'
pic.title = '周杰伦的图片'
3.2 操作元素样式属性
1.通过style属性操作CSS;

语法:对象.style.样式属性 = 值

实例:

// 获取元素
const box = document.querySelector('类名')
// 操作元素
box.style.width = '200px'
box.style.backgroundColor = 'pink'  
2.操作类名操作CSS;

语法:元素.className = '.box'

注意:使用className可以同时修改多个样式,直接使用className赋值会覆盖之前的类名

3.通过clssList操作类控制CSS

语法:

// 追加一个类
元素.classList.add('类名')
// 删除一个类
元素.classList.remove('类名')
// 切换一个类
元素.classList.toggle('类名')
4. 操作表单元素

获取:DOM对象.属性名

设置:DOM对象.属性名 = 新值

5.自定义属性

在标签上一律以‘’data-名字‘’开头

在DOM对象上一律以dataset对象方式获取

<body>
    <div class="box" data-id="10">盒子</div>
    <script>
        const box = document.querySelector('.box')
        console.log(box.dataset.id)
    </script>
</body>
6.定时器间歇函数

语法:

开启定时器:let 变量名 = setInterval(函数,间隔时间)

关闭定时器:clearInterval(变量名)

二、第二天

1.事件监听(绑定)

语法:元素对象.addEventListener('事件类型',要执行的函数)

实例:

<button>按钮<button>
<script>
    const btn = document.querySelector('.btn')
    btn.addEventListener('click',function(){
        函数执行过程
    })
</script>

2.事件类型

鼠标事件:鼠标点击click;鼠标经过mouseenter;鼠标离开mouseleave

焦点事件:获得焦点focus;失去焦点blur

键盘事件:键盘按下出发Keydown;键盘抬起触发Keyup;

文本事件:用户输入事件input

3.事件对象

事件对象也是个对象,这个对象里有事件触发时的相关信息。

例如:鼠标点击事件中事件对象就存了鼠标点击那个位置等信息。

在事件绑定的回调函数的第一个参数就是事件对象,一般命名为event,ev,e

语法:元素.addEventListener('click',function(e){ 函数执行过程 })

事件对象常用属性:

type:获取当前的事件类型

clientX/clientY:获取光标相对于浏览器可见窗口左上角的位置

offsetX/offsetY:获取光标相对于当前DOM元素左上角的位置

key:用户按下的键盘键的值

4.环境对象

环境对象指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境,谁调用this就是谁

5.回调函数

如果将函数A作为参数传递给函数B时,我们就称函数A为回调函数。

三、第三天

1.事件流

事件流指的是事件完整执行过程中的流动路径。

当触发事件时会经历两个阶段,从父到子是捕获阶段,从子到父是冒泡阶段。实际工作都是使用事件冒泡为主。

2.事件捕获与冒泡

    <div class="father">
        <div class="son"></div>
    </div>
    <script>
        const father = document.querySelector('.father')
        const son = document.querySelector('.son')
        // 事件冒泡
        document.addEventListener('click',function() {
            alert('我是爷爷')
        })
        father.addEventListener('click',function() {
            alert('我是爸爸')
        })
        son.addEventListener('click',function(e) {
            alert('我是儿子')
            // 阻止冒泡,需要借助事件对象
            e.stopPropagation()
        })
        // 事件捕获
        // document.addEventListener('click',function() {
        //     alert('我是爷爷')
        // },false)
        // father.addEventListener('click',function() {
        //     alert('我是爸爸')
        // },false)
        // son.addEventListener('click',function() {
        //     alert('我是儿子')
        // },false)
    </script>

3.事件解绑

<body>
    <button>按钮</button>
    <script>
        // 方法一
        const btn = document.querySelector('button')
        btn.onclick = function () {
            alert('点击了')
            // 事件解绑,直接用null覆盖掉之前的值,null为空对象,之前的function也是一个对象
            btn.onclick = null
        }
​
        // 方法二
        function fn () {
            alert('点击了')
        }
        // 事件绑定,匿名函数无法解绑,所以要给函数命名
        btn.addEventListener('click',fn)
        // 事件解绑
        btn.removeEventListener('click',fn)
    </script>
</body>

4.事件委托

<body>
    <!-- ul>li{第$个孩子}*5 -->
    <ul>
        <li>第1个孩子</li>
        <li>第2个孩子</li>
        <li>第3个孩子</li>
        <li>第4个孩子</li>
        <li>第5个孩子</li>
        <p>我不需要变色</p>
    </ul>
    <script>
        const ul = document.querySelector('ul')
        // 委托给父元素
        ul.addEventListener('click',function (e) {
            // alert(1)
            // this.style.color = 'red'
​
            // 利用事件对象e.target,实现点击的那个对象执行操作,但是这个点击p也会变色
            // e.target.style.color = 'red'
​
            // 只有点击li才会变色
            if (e.target.tagName === 'LI') {
                e.target.style.color = 'red'
            }
        })
    </script>
</body>

5.阻止默认行为

<body>
    <form action="http://www.itcast.cn">
        <input type="submit" value="免费注册">
    </form>
    <script>
        const form = document.querySelector('form')
        form.addEventListener('submit',function (e) {
            // 阻止默认行为
            e.preventDefault()
        })
    </script>
</body>

6.其他事件

1.页面加载事件

两种事件:

  1. load事件

    加载外部资源(如图片,外联CSS和JS等)加载完毕时触发的事件

    监听页面所有资源加载完毕:给window添加load事件

    语法:window.addEventListener('load',function () { })

  2. DOMcontentLoaded事件

    当初始的HTML文档被完全加载和解析完成之后,DOMcontentLoaded事件被触发,而无需等待样式表、图像等完全加载

    监听页面DOM加载完毕:给document添加DOMContentLoaded事件

    语法:document.addEventListener('DOMContentLoaded', function () {})

2.页面滚动事件
  1. scroll事件

    监听整个页面滚动:给window或document添加scroll事件

    语法:window.addEventListener('scroll', function () {})

    监听某个元素内部滚动直接给某个元素加scroll事件即可

  2. scrollTop监测滚动距离

    // 给整个页面加,也可以给某个元素加
    window.addEventListener('scroll', function () {
        console.log(document.documentElement.scrollTop)
    })
    // document.documentElement.scrollTop获取的值为可读写的,可以给其赋值,数字型,不带单位
    // document.documentElement.scrollTop = 800
3.页面尺寸事件
  1. resize事件

    会在窗口尺寸发生变化时触发的事件

    语法:window.addEventListener('resize',function () {})

  2. clientWidth监测屏幕宽度,不包含边框

    window.addEventListener('scroll', function () {
        console.log(document.documentElement.clientWidth)
    })

7.元素的尺寸与位置

  1. 获取宽高

    offsetwidth或offsetHeight获取元素宽度或高度,包含元素自身设置的宽度、padding、border

  2. 获取位置

    offsetLeft或offsetTop获取元素距离自己最近一级定位了的祖先元素的左或上距离,是只读属性

四、第四天

1.日期对象

  1. 得到当前时间

    const date = new Date()

  2. 指定时间

    const date = new Date('2024-2-29 12:00:00')

2.时间戳

// getTime,可以得到指定时间戳
const date = new Date()
console.log(date.getTime)
// +new Date,可以得到指定时间戳
console.log(+new Date)
// Date.now(),只能得到当前时间戳
console.log(Date.now())

3.节点操作

  1. 查找节点

    父节点: 孩子.parentNode属性

    子节点: 父亲.children属性,得到的是伪数组,使用需要遍历

    兄弟节点: 兄弟.nextElementSibling属性、兄弟.previousElementSibling属性

  2. 增加节点

    语法:document.createElement('标签名')

    <body>
        <ul>
            <li>我是老大</li>
        </ul>
        <script>
            const ul = document.querySelector('ul')
            // 1.创建节点
            const li = document.createElement('li')
            // 2.追加节点   作为最后一个子元素
            ul.appendChild(li)
            li.innerHTML = '我是追加的li'
            // 3.追加节点   作为第一个子元素
            // insertBefore(要插入的元素,放到哪个元素的前面)
            ul.insertBefore(li, ul.children[0])
        </script>
    </body>
  3. 删除结点

    语法:父元素.removeChild(子元素)

    <body>
        <ul>
            <li>1</li>
            <li>要删除的li</li>
            <li>2</li>
        </ul>
        <script>
            const ul = document.querySelector('ul')
            // 必须通过父元素删除节点   父元素.removeChild(子元素)
            ul.removeChild(ul.children[1])
        </script>
    </body>
  4. 克隆节点

    语法:元素.cloneNode(true)

    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
        <script>
            const ul = document.querySelector('ul')
            // 1.克隆节点   元素.cloneNode(true),true克隆内容,false只克隆标签没有内容
            const li1 = ul.children[0].cloneNode(true)
            // 2.追加节点
            ul.appendChild(li1)
            // ul.appendChild(ul.children[0].cloneNode(true))
        </script>
    </body>

五、第五天

1、定时器-延时函数

语法:setTimeout(回调函数,等待的毫秒数)

清除延时函数:clearTimeout(setTimeout(回调函数,等待的毫秒数))

2、location对象

location的数据类型是对象,它拆分并保存了 URL 地址的各个组成部分

常用属性和方法:

href 属性获取完整的 URL 地址,对其赋值时用于地址的跳转

search 属性获取地址中携带的参数,符号 ?后面部分

hash 属性获取地址中的啥希值,符号 # 后面部分

reload 属性用来刷新当前页面,传入参数 true 时表示强制刷新

3、navigator对象

navigator的数据类型是对象,该对象下记录了浏览器自身的相关信息

常用属性和方法:

通过 userAgent 检测浏览器的版本及平台

4、histroy对象

history 的数据类型是对象,主要管理历史记录, 该对象与浏览器地址栏的操作相对应,如前进、后退、历史记录等

前进:history.go(1)

后退:history.go(-1)

5、本地存储

  1. localStorage

    可以将数据永久存储在本地(用户的电脑), 除非手动删除,否则关闭页面也会存在,可以多窗口(页面)共享

存储数据:localStorage.setItem(key,value)

获取数据:localStorage.getItem(key)

删除数据:localStorage.removeItem(key)

  1. sessionStorage

    生命周期为关闭浏览器窗口,在同一窗口(页面)下数据可以共享,用法与localStorage基本相同

  2. 存储复杂数据类型

    本地只能存储字符串,无法存储复杂数据类型(如对象、数组),要存储复杂数据类型需要将其转换成JSON字符串,再存储到本地,到用时再将取出的字符串转换为对象

    const obj = {
        uname: '孙燕姿',
        age: 18,
        gender: '女'
    }
    // 存   必须转换为JSON字符串存储,属性和值都有引号,且都为双引号
    localStorage.getItem('obj', JSON.stringify(obj))
    // 取   
    console.log(JSON.parse(localStorage.getItem(obj)))

六、第六天

1、正则表达式

语法:const 变量名 = /表达式/

  • text()用于判断是否有符合规则的字符串,返回的是布尔值

  • exec()用于检索(查找)符合规则的字符串,找到返回数组,否则为null

边界符:^表示匹配行首的文本以谁开始;$表示匹配行尾的文本以谁结束

console.log(/哈/.text('哈'))  // true
console.log(/二哈/.text('二哈哈'))  // true
console.log(/二哈/.text('第二哈哈'))  // true
// ^ 开头
console.log(/^二哈/.text('二哈哈'))  // true
console.log(/^二哈/.text('第二哈哈'))  // false
// $ 结尾
console.log(/^二哈$/.text('第二哈哈'))  // false
console.log(/^二哈$/.text('二哈二哈'))  // false
console.log(/^二哈$/.text('二哈'))  // true

量词:用来设定某个模式出现的次数

// * 0次或更多次
console.log(/^哈*$/.text(''))  // true
console.log(/^哈*$/.text('哈'))  // true
console.log(/^哈*$/.text('哈哈'))  // true
// + 1次或更多次
console.log(/^哈+$/.text(''))  // false
console.log(/^哈+$/.text('哈'))  // true
console.log(/^哈+$/.text('哈哈'))  // true
// ? 0次或1次
console.log(/^哈?$/.text(''))  // true
console.log(/^哈?$/.text('哈'))  // true
console.log(/^哈?$/.text('哈哈'))  // false
// {n} n次
// {n,} n次或更多次
// {n,m} n到m次

字符类:

// 只要有[]中的任意一个字符都为true
console.log(/[abc]/.text('baby'))  // true
console.log(/[abc]/.text('city'))  // true
console.log(/[abc]/.text('die'))  // false
// - 连字符,a-z表示a到z之间的所有字符
console.log(/^[a-z]$/.text('h'))  // true
// [a-zA-A] 表示大小写都可以
// [0-9] 表示0到9都可以
// ^ 取反,[^a-z] 表示除了小写字母以外的字符
​
// .匹配除换行符之外的任何单个字符

预定义:指的是某些常见模式的简写方式

\d 相当于[0-9] \D 为取反

\w 相当于[A-Za-z0-9] \W为取反

\s 相当于[\t\r\n\v\f] \S为取反

修饰符:约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等

i:不区分大小写

g:匹配所有满足正则表达式的结果

语法:/表达式/修饰符,console.log(/a/i.text('A')) // true

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值