BOM相关知识点

一、BOM和DOM是什么?

BOM(Browser Object Model)浏览器对象模型

DOM(Document Object Model)文档对象模型

二、Window对象

1.四种常用方法

(1)innerHeight(获取浏览器窗口的高度)

(2)innerWidth(获取浏览器窗口的宽度)

(3)open(打开一个浏览器)

(4)close(关闭)

代码如下:

window.innerHeight
951
window.innerWidth
981
window.open('https://www.mzitu.com','','height=400px,width=400px,top=400px,left=400px')
window.close()

2.window子对象

window子对象前面的window可以省略。

(1)navigator

代码如下:

window.navigator.appName
'Netscape'
window.navigator.appVersion
'5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36'
window.navigator.userAgent       (这个要掌握)
'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36'
window.navigator.platform
'Win32'

(2)history

window.history.back()   回退到上一页

window.history.forward()  前进到下一页

两者对应浏览器左上角的两个箭头

 (3)location(掌握)

window.location.href     获取当前页面的url

window.location.href = url    跳转到url页面

window.location.reload()      刷新页面

3.弹出框

(1)警告框(2)确认框(3)提示框

alert('你不要过来呀!')
undefined
confirm('你确定真的要这么做吗?')
true
prompt('手牌号给我看一下','22号消费888')
'来宾2222'

 4.计时器

(1)过了一段时间触发(触发一次)

(2)每隔一段时间触发(循环)

<script>
    function func1()
    {
        alert('123')
    }
    let t = setTimeout(func1, 3000)   //以毫秒为单位

    clearTimeout(t)   //清除上面的计时请求,上述的请求需要有个变量取接收

    function func2()
    {
        alert('123')
    }
    function show()
    {
        let a = setInterval(func2,3000)
        function inner()
        {
            clearInterval(a)
        }
        setTimeout(inner, 9000)
    }
    show()
</script>

三、DOM操作

1.查找标签

直接查找

(1)id查找(2)类查找(3)标签查找

注意三个方法的返回值是不一样的。

DOM操作需要document关键字。

:63342/favicon.ico:1          Failed to load resource: the server responded with a status of 404 (Not Found)
document.getElementById('d1')
<div id=​"d1">​…​</div>​
document.getElementsByClassName('c1')
HTMLCollection [p.c1]0: p.c1length: 1[[Prototype]]: HTMLCollection
document.getElementsByTagName('div')
HTMLCollection(3) [div#d1, div, div, d1: div#d1]
let divEle = document.getElementsByTagName('div')[1]
undefined
divEle
<div>​div>div​</div>​

间接查找

let pEle = document.getElementsByClassName('c1')[0]  //注意是否要加索引值
pEle
<p class=​"c1">​…​</p>​
pEle.parentElement      //获取父标签
<div id=​"d1">​…​</div>​
pEle.parentElement.parentElement
<body>​…​</body>​
pEle.parentElement.parentElement.parentElement
<html lang=​"en">​<head>​…​</head>​<body>​…​</body>​</html>​
pEle.parentElement.parentElement.parentElement.parentElement
null

let divEle = document.getElementById('d1')   //获取所有的子标签
divEle
<div id=​"d1">​…​</div>​
divEle.children
HTMLCollection(3) [div, p.c1, p]
divEle.children[0]
<div>​div>div​</div>​
divEle.firstElementChild
<div>​div>div​</div>​
divEle.lastElementChild
<p>​div>p​</p>​
divEle.nextElementSibling       //同级别下面第一个标签
<div>​div最下面的div​</div>​
divEle.previousElementSibling   //同级别上面第一个标签
<div>​div最上面的div​</div>​

2.节点操作

let imgEle = document.createElement('img')    //创建标签
imgEle
<img>​
imgEle.src = '111.jpg'      //直接给标签加属性
'111.jpg'
imgEle
<img src=​"111.jpg">​
imgEle.setAttribute('username','aa')    //对于一些没办法直接加属性的通过这种方法进行
undefined
imgEle
<img src=​"111.jpg" username=​"aa">​
imgEle.setAttribute('title','一张图片')
undefined
imgEle
<img src=​"111.jpg" username=​"aa" title=​"一张图片">​
let divEle = document.getElementById('d1')
undefined
divEle.appendChild(imgEle)    //标签内部添加元素
<img src=​"111.jpg" username=​"aa" title=​"一张图片">​
let aEle = document.createElement('a')
undefined
aEle
<a>​</a>​
aEle.href = 'https://www.baidu.com/'
'https://www.baidu.com/'
aEle.innerText = '点击'     //给标签加上文本
'点击'
aEle
<a href=​"https:​/​/​www.baidu.com/​">​点击​</a>​
let divEle = document.getElementById('d1')
undefined
let pEle = document.getElementById('d2')
undefined
divEle.insertBefore(aEle,pEle)   //指定位置添加标签
<a href=​"https:​/​/​www.baidu.com/​">​点击​</a>​

补充操作

appendChild()、removeChild()、replaceChild()

setAttribute()   ---设置属性

getAttribute()  ---获取属性

removeAttribute   --移除属性

divEle.innerText    //获取标签内部所有的文本
'div 点击\n\ndiv>p\n\ndiv>span'
divEle.innerHTML   //获取内部文本和标签
'div\n    <a href="https://www.baidu.com/">点击</a><p id="d2">div&gt;p</p>\n    <span>div&gt;span</span>\n'
divEle.innerText='aaaaa'
'aaaaa'
divEle.innerHTML='bbbbb'
'bbbbb'
divEle.innerText='<h1>hhhh</h1>'    //不识别HTML标签
'<h1>hhhh</h1>'
divEle.innerHTML='<h1>hhhh</h1>'    //识别HTML标签
'<h1>hhhh</h1>'

3.获取值操作

let inEle = document.getElementById('d1')
inEle.value     //获取值
'21321'
let seEle = document.getElementById('d2')
seEle.value
'111'
seEle.value
'222'


//如何获取用户上传的文件数据

let fileEle = document.getElementById('d3')
undefined
fileEle.value
'C:\\fakepath\\1651749706237821.pdf'
fileEle.files[0]    //获取文件数据
File {name: '1651749706237821.pdf', lastModified: 1651922263552, lastModifiedDate: Sat May 07 2022 19:17:43 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 147083, …}

class、css操作

let divEle = document.getElementById('d1')
undefined
divEle.classList     //获取标签的所有类属性
DOMTokenList(2) ['bg_red', 'bg_green', value: 'bg_red bg_green']
divEle.classList.remove('bg_red')     //删除类属性
undefined
divEle.classList.add('bg_red')        //添加类属性
undefined
divEle.classList.contains('bg_red')   //验证是否含有某个类属性
true
divEle.classList.contains('c')
false
divEle.classList.toggle('c')  //有则删除无则添加
true
divEle.classList.toggle('c')
false
//DOM操作样式标签,需要用到style。
let pEle = document.getElementsByTagName('p')[0]
undefined
pEle
<p id=​"d2">​给我一遍快​</p>​
pEle.style.color='red'
'red'
pEle.style.fontSize='28px'
'28px'
pEle.style.backgroundColor='yellow'
'yellow'
pEle.style.border='3px solid red'
'3px solid red'

4.事件

达到某个事件设定的条件,自动触发的动作

<body>
<button onclick="func1()">点我</button>
<button id="d1">点我</button>
<script>
    //第一种绑定事件的方式
    function func1() {
        alert(111)
    }
    //第二种
    let btnEle = document.getElementById('d1');
    btnEle.onclick = function () {
        alert(222)
    }
</script>
</body>

script可以放置于head和body里面,但是通常放置于body里面的最下面。

<script>
        //等待窗口加载后再执行代码
        window.onload = function () {
            //第一种绑定事件的方式
            function func1() {
                alert(111)
            }

            //第二种
            let btnEle = document.getElementById('d1');
            btnEle.onclick = function () {
                alert(222)
            }
        }
    </script>

原生js事件绑定

开关灯案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1 {
            height: 200px;
            width: 200px;
            border-radius: 50%;
        }
        .bg_green {
            background-color: greenyellow;
        }
        .bg_red {
            background-color: red;
        }
    </style>
</head>
<body>
<div id="d1" class="c1 bg_red bg_green"></div>
<button id="d2">变色</button>

<script>
    let btnEle = document.getElementById('d2')
    let divEle = document.getElementById('d1')
    btnEle.onclick = function () {
        //绑定点击事件
        divEle.classList.toggle('bg_red')
    }
</script>
</body>
</html>

input框获取焦点失去焦点案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" value="老板去吗?" id="d1">
<script>
    let iEle = document.getElementById('d1')
    //获取焦点事件
    iEle.onfocus = function () {
        // 将input框内部值去除
        iEle.value = ''
    }
    // 失去焦点事件
    iEle.onblur = function () {
        // 给input框内部值重新赋值
        iEle.value = '没钱 不去'
    }
</script>
</body>
</html>

显示当时时间案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" id="d1" value="">
<button id="d2">开始</button>
<button id="d3">结束</button>

<script>
    //定义个全局变量来存储计时器
    let t = null
    let inputEle = document.getElementById('d1')
    let startBtnEle = document.getElementById('d2')
    let endBtnEle = document.getElementById('d3')
    //1.访问页面之后,将访问的时间展示到input框中
    //2.动态显示时间
    //3.添加两个button,实现开始与结束的功能
    function showTime() {
        let currentTime = new Date()
        inputEle.value = currentTime.toLocaleString()
    }
    startBtnEle.onclick = function () {
        if (!t) {
             t = setInterval(showTime,1000)
        }
    }

    endBtnEle.onclick = function () {
        clearInterval(t)
        //将t重置为null
        t = null
    }

</script>
</body>
</html>

省市联动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<select name="" id="d1">
    <option value="" disabled selected>--请选择--</option>
</select>
<select name="" id="d2"></select>
<script>
    let proEle = document.getElementById('d1')
    let cityEle = document.getElementById('d2')
    //先模拟省市数据
    data = {
        "河北省":["廊坊", "邯郸"],
        "北京":["朝阳区", "海淀区"],
        "山东":["威海市", "烟台市"],
        "上海":["浦东新区", "静安区", "黄浦区"],
    };
    for (let key in data) {
        // 将省信息做成一个个option标签,添加到第一个select框中
        //1.创建option标签
        let opEle = document.createElement('option')
        //2.设置文本
        opEle.innerText = key
        //3.设置value
        opEle.value = key     //<option value="省">省</option>
        //4.将创建好的option标签添加到第一个select中
        proEle.appendChild(opEle)
    }
    //文本域变化事件 change事件
    proEle.onchange = function () {
        // 先获取用户选择的省
        let currentPro = proEle.value
        // 获取对应的市信息
        let currentCityList = data[currentPro]
        //清空市标签中的信息
        cityEle.innerHTML = ''
        //给市标签加一个选择
        let ss = "<option disabled selected>请选择</option>"
        cityEle.innerHTML = ss
        // for循环所有的市,渲染到第二个select中
        for(let i=0; i<currentCityList.length; i++) {
            let currentCity = currentCityList[i]
             //1.创建option标签
            let opEle = document.createElement('option')
            //2.设置文本
            opEle.innerText = currentCity
            //3.设置value
            opEle.value = currentCity     //<option value="市">市</option>
            //4.将创建好的option标签添加到第二个select中
            cityEle.appendChild(opEle)
        }

    }
</script>
</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值