JS之BOM与DOM

BOM操作

所有浏览器都支持 window 对象。它表示浏览器窗口。

*如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

*没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。

所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。

全局变量是 window 对象的属性。全局函数是 window 对象的方法。

接下来要讲的HTML DOM 的 document 也是 window 对象的属性之一。

一些常用的Window方法:

window.innerHeight - 浏览器窗口的内部高度
window.innerWidth - 浏览器窗口的内部宽度
window.open() - 打开新窗口
window.close() - 关闭当前窗口
history.forward()-前进一页
history.back()-后退一页
window.location.reload()-刷新当前页面


confirm()
	 确认框,有返回值true或者false
prompt()   括号内可以写两个,第一个是提示,第二个是默认值
	提示框,返回的是用户填写的内容
altert()
	警告框,括号内填写警告的内容

image

计时器相关操作(重要)

操作1:定时延迟执行
<body>
    <script>
        function showMsg(){
            alert('快来获取美女图片吧')
        }
        let t=setTimeout(showMsg,3000)
        /*第一个填写调用的函数,第二个填写的延迟的毫秒时间*/
        clearTimeout(t)  //取消任务
    </script>
</body>


操作2:循环定时执行
<body>
    <script>
        function showMsg(){
            alert('快来获取美女图片吧')
        }
       let t=setInterval(showMsg,3000)  //每隔3000毫秒执行一下
       clearInterval(t)  //取消任务
    </script>
</body>

DOM操作

DOM (Document Object Model)是指文档对象模型,通过它可以访问HTML文档的所有元素

既然DOM操作是通过js代码来操作标签 所以我们需要先学习如何查找标签之后才能给标签绑定一些JS代码(DOM操作)

查找标签

"""
1.js中变量名的命名风格推荐是驼峰体
2.js代码查找到的标签如果需要反复使用可以用变量接收 变量名规律xxxEle
"""
document.getElemengtById('d1')
	结果就是标签对象本身
document.getElementsByClassName('c1')
	结果是数组里面包含有多个标签对象
document.getElementsByTagName('span')
	结果是数组里面含有多个标签对象
    
parentElement		父节点标签元素
children			所有子标签
firstElementChild	 第一个字标签元素
lastElementChild	 最后一个子标签元素
nextElementSibling   下一个兄弟标签元素
previousElementSibling	上一个兄弟标签元素

image

操作节点

js代码创建一个标签

let aEle = document.createElement('a')

js代码操作标签属性

aEle.href = '网址'		只能添加默认参数

js代码操作标签文本

aEle.innerText = '文本内容'

js代码查找div标签并将a追加到div内部

let divEle = document.getElementById('d1')//查找div标签
divEle.appendChild(aEle)//div标签尾部添加子标签

js代码操作关键词

.innerText			获取标签内部所有的文本内容
.innerText='文本'		替换/设置标签内部的文本(不识别标签语法)
.innerHTML			获取标签内部所有的标签包含文本
.innerHTML='文本'		替换/设置标签内部的文本(识别标签语法)

image

获取值操作

1.针对用户输入的和用户选择的标签
	标签对象.value
2.针对用户上传的文件数据
	标签对象.files
  	标签对象.files[0]
let fileEle = document.getElementsByClassName('c1')  

fileEle[0].files  //获取上传数据内容

class与css操作

1.js操作标签css样式
	标签对象.style.属性名(下划线没有 编程驼峰体)

2.js操作标签class属性
	标签对象.classList.add()
	标签对象.classList.contains()
	标签对象.classList.remove()
	标签对象.classList.toggle()

事件

事件可以键的的理解为通过js代码给html标签绑定一下自定义的功能

常见事件
	onclick		当用户点击某个对象时调用的事件
	onfocus		元素获得焦点
	onblur		元素失去焦点
	onchange	域的内容被改变

绑定事件的多种方式:
<!--绑定事件的方式1-->
  <button onclick='showMsg()'>快按我</button>
     	function showMsg(){
     let msg = prompt('你确定要这样吗?');
     console.log(msg)
"方式1就写死了,解耦性不高"
            
<!--绑定事件的方式2-->
 <input type='button' value='快快快' id='d1'>
     
     <script>
     let inputEle = document.getElementById('d1')
     inputEle.onclick = function(){
         alter('谁在那里点我1!!!')
     }
 }
     </script>
"方式2相对于解耦性会高一点"

事件函数中的this关键字
	this指代的就是当前被操作的标签对象本身
 	如果事件函数内有多层嵌套那么最好在一开始用变量存储一下防止后续变化
 
onload方法
	XXX.onload 等待XXX加载完毕之后再执行后面的代码

事件实战案例

<form action="">
    <input type="text" value="游戏机" id="d1"> <!--输入值默认是游戏机-->
    <script>
        let inputEle = document.getElementById('d1')
        inputEle.onfocus = function (){  /*获得焦点将默认值去掉*/
            this.value = ''
        }
        inputEle.onblur = function (){
            this.value = '下次再来' /*市区焦点将默认值该为下次再来*/
        }
    </script>
</form>
---------------------------------------------------------------------
<body>
    <p>username:
        <input type="text" id="d1">
        <span style="color: #f584b7"></span><!--行内标签,没有添加文本,在做判断的时候用js给标签添加文本-->
    </p>
    <p>password:
        <input type="password" id="d2">
        <span style="color: red"></span>
    </p>
    <button id="suBtn">提交</button>

<script>
    let suBle = document.getElementById('suBtn')
    suBle.onclick = function () {       //绑定单机某个对象时候的事件
        let userNameEle = document.getElementById('d1') //获得用户名的标签
        let passWordEle = document.getElementById('d2') //获取密码的标签
        if (userNameEle.value === 'jason') {   //判断如果用户名是jason
            userNameEle.nextElementSibling.innerText = '用户名不能是jason'  //给span添加文本内容,input的下一个标签
        }else{userNameEle.nextElementSibling.innerText = '用户名符合'}//如果不是,给span添加文本

        if (passWordEle.value === '123') {
            passWordEle.nextElementSibling.innerText = '密码不能是123'
        }else{passWordEle.nextElementSibling.innerText = '密码符合'}
    }
    suBle.onblur = function (){   // 绑定某个对象失去焦点时候的事件
        let userNameEle = document.getElementById('d1')
        let passWordEle = document.getElementById('d2')
        userNameEle.nextElementSibling.innerText = ''
        passWordEle.nextElementSibling.innerText = ''
    }
</script>
</body>
=====================================================================
<body>
    <select name="" id="d1">

    </select>
    <select name="" id="d2">

    </select>

<script>
    let data= {
        "河北":["廊坊市","邯郸市"],
        "北京":["朝阳区","海淀区"],
        "山东":["威海市","烟台市"],
        "安徽":["芜湖市","合肥市"],
        "上海":["浦东新区","静安区"]
    }
    //提前查找好省和市的select标签
    let proSeEle = document.getElementById('d1')
    let citySeEle = document.getElementById('d2')
    //1.获取所有的省信息
    for(let pro in data){
        //2.创建option标签
        let proEle = document.createElement('option')
        //3.添加文本及属性
        proEle.innerText = pro
        proEle.setAttribute('value',pro)
        //4.将创建好的opti标签添加到省下拉框中
        proSeEle.appendChild(proEle)
    }
    //5.给省标签绑定文本域变化事件onchange
    proSeEle.onchange = function (){
        citySeEle.innerHTML=''//每次操作市之前清空市的数据
        //6.获取用户选择的省信息,根据省获取市
        let targetProDate = this.value
        let cityDataList = data[targetProDate]
        for(let i=0;i<cityDataList.length;i++){
            let cityOpEle = document.createElement('option')
            cityOpEle.innerText = cityDataList[i]
            cityOpEle.setAttribute('value',cityDataList[i])
            citySeEle.appendChild(cityOpEle)
        }
    }
</script>
</body>
posted @ 2022-12-06 20:14  雪语  阅读(27)  评论(0编辑  收藏  举报