第四章:BOM操作和DOM操作

  • BOM(Browser Object Mode)
    浏览器对象模型
    js代码操作浏览器
  • DOM(Document Object Mode)
    文档对象模型
    js代码操作标签

BOM操作

window对象

window对象指代的就是浏览器窗口

  • window.innerHeight # 浏览器窗口的高度
    1267
  • window.innerWidth # 浏览器窗口的宽度
    981
  • window.open

window.open('https://www.mmzztt.com/','','height=400px,width=400px,top=400px,left=400px'); // 新建窗口打开,第二个页面写空即可,第三个参数写新建窗口的大小和位置

  • window.close # 关闭当前页面

window子对象之navigator

  • window.navigator.appName: 获取浏览器的名字
  • window.navigator.appVersion: 获取浏览器的版本
  • window.navigator.userAgent: 用来表示当前访问对象是否是一个浏览器
  • window.navigator.platform: 获取当前操作系统的平台信息

window子对象之history对象

window.history.back(); : 回退到上一页
window.history.forward(); : 前进到下一页

对应的就是浏览器左上方的两个箭头

window子对象之location对象

  • window.location.href; : 获取当前页面的URL
  • window.location.href = 'https://mmzztt.com/'; : 跳转到指定的URL
  • window.location.reload(); : 刷新页面,浏览器上方的小圆圈

DOM操作

DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

HTML DOM 模型被构造为对象的树。

HTML DOM树

image
通过这个对象模型,JavaScript 获得创建动态 HTML 的所有力量:

  • JavaScript 能改变页面中的所有 HTML 元素
  • JavaScript 能改变页面中的所有 HTML 属性
  • JavaScript 能改变页面中的所有 CSS 样式
  • JavaScript 能删除已有的 HTML 元素和属性
  • JavaScript 能添加新的 HTML 元素和属性
  • JavaScript 能对页面中所有已有的 HTML 事件作出反应
  • JavaScript 能在页面中创建新的 HTML 事件

DOM标准规定HTML文档中的每个成分都是一个节点(node):

  • 文档节点(document对象):代表整个文档
  • 元素节点(element 对象):代表一个元素(标签)
  • 文本节点(text对象):代表元素(标签)中的文本
  • 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
  • 注释是注释节点(comment对象)

属性是您能够获取或设置的值(就比如改变 HTML 元素的内容)。
方法是您能够完成的动作(比如添加或删除 HTML 元素)。

查找标签

用document起手

直接查找(掌握)

方法 描述
document.getElementById(id) 通过元素 id 来查找元素
document.getElementsByTagName(name) 通过标签名来查找元素
document.getElementsByClassName(name) 通过类名来查找元素

当你用变量名指代标签对象的时候,一般情况下都推荐你书写成
xxxEle

  • divEle
  • PEle

例如:

// 找到ID为d1的标签,把它赋值为divEle
let divEle = document.getElementById('d1')

间接查找(熟悉)

方法 描述
parentElement 父节点标签元素
children 所有子标签
firstElementChild 第一个子标签元素
lastElementChild 最后一个子标签元素
nextElementSibling 下一个兄弟标签元素
previousElementSibling 上一个兄弟标签元素

兄弟标签指的是同级别标签

let divEle = document.getElementByID('d1')
// 获取ID为d1的父标签
divEle.parentElement
// 获取ID为d1的父标签的父标签(可以这样.下去,但是不建议这样做)
divEle.parentElement.parentElement
// 获取ID为d1的标签下所有的子元素
divEle.chlidren
// 后面我就不一一举例了,跟上面是同理的

节点操作

添加和删除元素

方法 描述
document.createElement(element) 创建 HTML 元素
somenode.removeChild(element) 删除 HTML 元素
somenode.appendChild(element) 在尾部追加 HTML 元素
somenode.insertBefore(newnode,某个节点) 把添加的节点放在某个节点的
somenode.replaceChild(newnode, 某个节点) 替换 HTML 元素
somenode.innerText = '要添加的文本内容' 添加文本内容
somenode.innerText 查看标签内的文本内容
document.write(text) 写入 HTML 输出流
点击查看具体使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
	<div id="d1">
		div
		<p id="p1">ppp</p>
	</div>
	<script>
		// 找到id为d1的标签
		let div_ele = document.getElementById('d1');
		// id为p1的标签
		let p_ele = document.getElementById('p1');
		// 创建一个img标签
		let img_ele = document.createElement('img');
		let a_ele = document.createElement('a');
		// 给刚刚新建的img标签添加src属性,如果添加的属性是标签默认的属性可以简写为img_ele.src = 'img/壁纸.jpg'
		img_ele.setAttribute('src','img/壁纸.jpg');
		a_ele.href = 'https://www.jd.com';
		// innerText可以改变标签的文本内容
		a_ele.innerText = '京东';
		// 在div_ele标签内追加刚刚新建的img标签
		div_ele.appendChild(img_ele);
		// 删除div_ele标签内的p_ele
		div_ele.removeChild(p_ele);
		// a_ele标签替换img_ele标签
		div_ele.replaceChild(a_ele,img_ele);
	</script>
</body>
</html>

改变HTML元素

方法 描述
element.innerHTML = new html content 改变元素的 inner HTML
element.attribute = new value 改变 HTML 元素的属性值
element.setAttribute(key, value) 改变 HTML 元素的属性值
element.style.property = new style 改变 HTML 元素的样式

property表示样式,如background、font-size等等
注意:在css中写font-size,在js中要改成fontSize
实例:div_ele.style.background = 'red';
div_ele.style.fontSize = '200px';

点击查看具体使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
	<div id="d1">
		<a href="https://www.mmzztt.com" id="a1">美之图</a>
	</div>
	<script>
		// 查找标签
		let div_ele = document.getElementById('d1');
		let a_ele = document.getElementById('a1');
		// 把a标签的href属性改为'https://www.jd.com'
		a_ele.setAttribute('href','https://www.jd.com')
		// 改变div标签内的HTML代码,会识别''中的代码并运行
		div_ele.innerHTML = '<p id="1">ppp</p>'
		// 改变div标签的背景颜色
		div_ele.style.background = 'red'
	</script>
</body>
</html>

innerText与innerHTML

  • innerText改变的只是文本内容,就算里面写的HTML代码也不会识别,只会当不同文本显示
  • innerHTML会识别HTML代码并运行,替换掉里面的HTML

添加事件处理程序

方法 描述
document.getElementById(id).onclick = function() 向 onclick 事件添加事件处理程序

查找HTML对象

方法 描述
document.anchors 返回拥有 name 属性的所有 <a> 元素
document.applets 返回所有 <applet> 元素(HTML5 不建议使用)
document.baseURI 返回文档的绝对基准 URI
document.body 返回<body> 元素
document.cookie 返回文档的 cookie
document.doctype 返回文档的 doctype
document.documentElement 返回 <html> 元素
document.documentMode 返回浏览器使用的模式
document.documentURI 返回文档的 URI
document.domain 返回文档服务器的域名
document.embeds 返回所有 <embed> 元素
document.forms 返回所有 <form> 元素
document.head 返回 <head> 元素
document.images 返回所有 <img> 元素
document.implementation 返回 DOM 实现
document.inputEncoding 返回文档的编码(字符集)
document.lastModified 返回文档更新的日期和时间
document.links 返回拥有 href 属性的所有 <area><a> 元素
document.readyState 返回文档的(加载)状态
document.referrer 返回引用的 URI(链接文档)
document.scripts 返回所有 <script> 元素
document.strictErrorChecking 返回是否强制执行错误检查
document.title 返回 <title> 元素
document.URL 返回文档的完整 URL

获取值操作(form表单相关)

适用以下标签

  • .input
  • .select
  • .textarea

获取用户数据标签内部的数据

let inputEle = document.getElementById('d1');
inputEle.value;  // 获取用户在input框输入的内容
'liuhousheng'

let selectEle = document.getElementById('d2');
selectEle.value;  // 获取用户在select框选择的值
'3'

修改内容

let inputEle = document.getElementById('d1');
inputEle.value = 'liuhousheng'  // value后面加等号就是赋值
'liuhousheng'

获取用户上传的文件数据

let fileEle = document.getElementById('d3');
fileEle.value;  // 无法通过value直接获取文件数据
'C:\\fakepath\\关键字'

// 用files获取文件的数组对象
fileEle.files;  // 数组 [文件对象,文件对象1...]
FileList {0: File, length: 1}

fileEle.files[0];  // 获取文件数据
File {name: '关键字', lastModified: 1647268764869, lastModifiedDate: Mon Mar 14 2022 22:39:24 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 5354, …}

CSS操作、clss操作

CSS操作

JS操作CSS属性的规律:

  1. 对于没有中横线的CSS属性一般直接使用style.属性名即可。如:

obj.style.margin
obj.style.width
obj.style.left
obj.style.position

  1. 对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:

obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily

clss操作

  • className 获取所有样式类名(字符串)
  • classList 获取所有的类名,数组
  • classList.remove(cls) 删除指定类
  • classList.add(cls) 添加类
  • classList.contains(cls) 存在返回true,否则返回false
  • classList.toggle(cls) 存在就删除,否则添加
点击查看具体使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="index.css">
	<style>
		.c1{
			width:200px;
			height:200px;
			border-radius:50%;
			background:yellow;
		}
		.bg_red{
			background:red;
		}
		.bg_green{
			background:green;
		}
	</style>
</head>
<body>
	<div id='d1' class="c1 bg_red bg_green">
	</div>
	<script>
		// 找到标签
		let div_ele = document.getElementById('d1');
		// 返回标签内所有的类属性   DOMTokenList(3) ['c1', 'bg_red', 'bg_green', value: 'c1 bg_red bg_green']
		div_ele.classList;
		// 以字符串的形式返回所有的类属性   'c1 bg_red bg_green'
		div_ele.className;
		// 删除bg_green类属性
		div_ele.classList.remove('bg_green');
		// 添加bg_green类属性
		div_ele.classList.add('bg_green');
		// 判断标签中是否有bg_red类属性,包含就返回true,不包含就返回false
		div_ele.classList.contains('bg_red');
		// 判断标签中是否包含bg_red这个类,包含就删除这个类,不包含就添加这个类
		div_ele.classList.toggle('bg_red');
	</script>
</body>
</html>
## 弹出框 可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。

警告框

警告框经常用于确保用户可以得到某些信息。

当警告框出现后,用户需要点击确定按钮才能继续进行操作。

语法:

alert("你看到了吗?");

确认框(了解即可)

确认框用于使用户可以验证或者接受某些信息。

当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。

如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。

语法:

confirm("你确定吗?")

提示框(了解即可)

提示框经常用于提示用户在进入页面前输入某个值。

当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。

如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

语法:

prompt("请在下方输入","你的答案")

js常用事件

原生js事件绑定

onclick			当用户单击时触发
ondblclick		当用户双击时触发

onfocus			元素获得焦点
onblur			元素失去焦点
onchange		域的内容被改变

onkeydown		某个键盘按键按下
onkeypress		某个按键按键被按下并松开
onkeyup			某个按键被松开
onload			一张页面或一副图像完成加载
onmousedown		鼠标按键被按下
onmousemove		鼠标按键移动
onmouseout		鼠标从某个元素上离开
onmouseover		鼠标移动到某个元素上

onsselect		在文本框的文本被选中时
onsubmit		确认按钮被点击,使用的对象是form

开关灯案例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>开关灯</title>
    <style>
        .c1{
            height:400px;
            width:400px;
            border-radius:50%;
        }
        .bg_red{
            background-color:red;
        }
        .bg_green{
            background-color:green;
        }
    </style>
</head>
<body>
    <div id="d1" class="c1 bg_green bg_red"></div>
    <button id="d2">变色</button>
    <script>
        let divEle = document.getElementById('d1')
        let buttonEle = document.getElementById('d2')
        buttonEle.onclick = function (){  // 绑定点击事件
            divEle.classList.toggle('bg_green')  //  动态的修改div标签属性
        }
    </script>
</body>
</html>
input框获取焦点、失去焦点案例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>input框获取焦点、失去焦点</title>
</head>
<body>
    <input type="text" value="来玩呀" id="d1">

    <script>
        let inputEle = document.getElementById('d1')
        // 获取焦点事件
        inputEle.onfocus = function(){
            // 获取焦点时将input框内
            的值去除
            inputEle.value = ''
        }
        // 失去焦点事件
        inputEle.onblur = function(){
            // 失去焦点后给input框重新赋值
            inputEle.value = '不来不来'
        }
    </script>
</body>
</html>
实时展示当前时间
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1" style="height:50px;width:200px"></div>
    <button id="d2">开始</button>
    <button id="d3">结束</button>

    <script>
        // 定义一个空值,来接收计时器
        let t = null

        let divEle = document.getElementById('d1')
        let startBut = document.getElementById('d2')
        let endBut = document.getElementById('d3')

        // 在div标签内展示当前时间
        function showTime(){
            let currentTime = new Date()
            divEle.innerText = currentTime.toLocaleString()
        }

        // 单机开始按钮计时器开始工作
        startBut.onclick = function(){
            // 只要一个计时器,当t有值时不再开新的计时器
            if(!t){
                t = setInterval(showTime, 1000)
            }
        }

        // 关闭计时器
        endBut.onclick = function(){
            clearInterval(t)
            // 关闭计时器的同时把t的值清空
            t = null
        }

    </script>
</body>
</html>
省市联动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>省市联动</title>
</head>
<body>
    <select name="" id="d1">
        <option value="" disabled selected>--请选择--</option>
    </select>
    <select name="" id="d2">
        <option value="" selected disabled>--请选择--</option>
    </select>

    <script>
        let proEle = document.getElementById('d1')
        let cityEle = document.getElementById('d2')
        // 先模拟省市数据
        data = {
            '武汉市':['江汉区','江夏区','洪山区','汉口'],
            '荆州市':['公安县','监利县','南平','孟溪'],
            '上海':['浦东区','静安区','黄浦区'],
            '深圳':['南山区','宝安区','福田区'],
            '北京':['朝阳区','海淀区','昌平区']
        }
        // for循环获取省
        for(let key in data){
            // 先创建option标签
            let optionEle = document.createElement('option')
            // 设置文本
            optionEle.innerText = key
            // 设置属性value
            optionEle.value = key
            // 将创建好的option标签添加到select标签中
            proEle.appendChild(optionEle)
        }

        // 文本域变化事件  change事件
        proEle.onchange = function(){
            // 先清空所有的option标签
            cityEle.innerHTML = ''
            // 自己加一个默认的不可选的请选择option标签(加了这个上面的清空代码就可写可不写)
            cityEle.innerHTML = '<option value="" selected disabled>--请选择--</option>'
            // 获取到用户选择的省
            let user_pro = proEle.value
            // 获取到对应的市信息的数组
            let city_list = data[user_pro]
            // for循环获取对应的市
            for(let i = 0;i<city_list.length;i++){
                // 创建option标签
                let optionEle = document.createElement('option')
                // 设置文本
                optionEle.innerText = city_list[i]
                // 设置value属性
                optionEle.value = city_list[i]
                // 把option标签添加到select标签中
                cityEle.appendChild(optionEle)
            }
        }
    </script>
</body>
</html>
`
posted @   7七柒  阅读(244)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示