Web前端 学习知识点总结(九)JavaScript的BOM和DOM基础

系列文章目录

Web前端 学习知识点总结(一)HTML基本标签.
Web前端 学习知识点总结(二)之Form和Css选择器.
Web前端 学习知识点总结(三)Css字体、文本样式以及盒子模型.
Web前端 学习知识点总结(四)之display 和 float.
Web前端 学习知识点总结(五)qq导航条案例,使用min-width解决留白.
Web前端 学习知识点总结(六)定位position.
Web前端 学习知识点总结(七)Css3动画animation.
Web前端 学习知识点总结(八)JavaScript的常用基础.
Web前端 学习知识点总结(九)JavaScript的BOM和DOM基础.
Web前端 学习知识点总结(十)jQuery基础 获取文本和选择器.
Web前端 学习知识点总结(十一)jQuery进阶 动画和节点操作.
Web前端 学习知识点总结(十二)jQuery进阶 表单验证和简单正则表达式.
Web前端 学习知识点总结(十三)学生管理系统案例.


前言

在掌握了基础的JS语句后,接下来的重要模型BOM和DOM。它们进一步,可以帮助我们解决大部分的页面问题,BOM是浏览器的对象模型,主要的功能和作用是提供了浏览器的交互,且提高了用户的体验。DOM是页面对象模型,可以找到页面中所有的HTML标签和CSS的样式,方便添加动态的效果,完成需要的功能和设计。


一、BOM

浏览器对象模型 (BOM(Browser Object Model ) 使 JavaScript 有能力与浏览器"对话"。

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

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

全局变量是 window 对象的属性。

全局函数是 window 对象的方法。

甚至 HTML DOM 的 document 也是 window 对象的属性之一

1.1 Window方法

location和window内部的一些基本方法:


<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--window 属性 
			location 
			location.pathname //可以返回url的路径
			location.href="" //可以跳转到指定的地址
			方法
				也可以不加window直接使用
				window.open() 打开新的界面
				window.close() 关闭界面
				alert() 提醒
				prompt() 输入信息
				confirm() 点确定返回true 点取消返回false
			-->
			<!--<input type="button" name="" id="" value="打开" οnclick="javascript:window.open
			('http://www.baidu.com')"/>-->
			<input type="button" name="" id="" value="打开" onclick="doOpen()"/>
			<input type="button" name="" id="" value="关闭" onclick="doClose()"/>
			<input type="button" name="" id="" value="alert" onclick="doalert()"/>
			<input type="button" name="" id="" value="prompt" onclick="doPrompt()"/>
			<input type="button" name="" id="" value="Confirm" onclick="doConfirm()"/>
			<script>
				function doOpen(){
					window.open("http://www.baidu.com");
					window.location.href="http://www.baidu.com";
				}
				function doClose(){
					window.close();
				}
				
				function doalert(){
					window.alert("kanba");
				}
//				输入框
				function doPrompt(){
					var result=window.prompt("请输入你的名字");
					alert(result);
				}
//				提示框
				function doConfirm(){
					window.confirm("确定要删除吗?")
				}
			</script>
	</body>
</html>

1.2 history方法

  1. Window history.back() ;
    history.back() 方法加载历史列表中的前一个 URL。

    和浏览器中点击后退按钮的作用相同。

  2. Window history.forward() ;
    history forward() 方法加载历史列表中的下一个 URL。
    和浏览器中点击前进按钮的作用相同。

  3. go(1) 正值前进 负值后退。

1.3 document方法

  1. getElementById() 通过id标签找到html标签的位置。
  2. getElementsByName() 通过name标签找到html标签的位置。
  3. getElementsByTagName() 通过html的标签名字,找到html标签的位置。

可以使用组合标签:
如:
getElementById().getElementsByTagName();可以找打id 下面的指定标签。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
			<!--document 文档
				属性
					referrer 前置页面的url
				方法
					write()
					getElementById() 找到标签  唯一的id
					.innerHTML 可以获取标签内的内容 且是双标签
					.value 是表单元素标签中的内容 (单标签)
					
					下两者返回的是一个集合
					getElementsByName() 按照name属性 形成一个数组 拿出一系列的值
					
					getElementsByTagName() 按照标签名  
			-->
		<p id="t">当幸福来敲门</p>
		<input type="text"  id="username" /><br />
		<div>
			<span name="season"></span>
			<span name="season"></span>
			<span name="season"></span>
			<span name="season"></span>
		</div>
		<!--用于测试-->
		<input type="button" onclick="changeSeason_02()" value="换名" />
		<script>
//			函数1 标题进行改变
			function changeTitle(){
//				拿到整个p标签
				var p = document.getElementById("t");
				p.innerHTML="幸福来了";
			}
//			函数2 名字的改变
			function changeName(){
				var inp = document.getElementById("username");
				inp.value="lisi"
			}
//			函数3 通过name 改变季节
			function changeSeason(){
//				span列表
				var spans = document.getElementsByName("season");
				for(var i = 0;i < spans.length; i++){
					alert(spans[i].innerHTML);
				}
			}
					
//			函数4 通过tag标签寻找
			function changeSeason_02(){
//				span列表
				var spans = document.getElementsByTagName("span");
				for(var i = 0;i < spans.length; i++){
					alert(spans[i].innerHTML);
				}
			}
		</script>
	</body>
</html>

1.4 Window的时间函数。

  1. setTimeout(函数名 延迟时间) 延迟多长时间来执行
    一般用来做静态效果。
  2. setInterval(“函数名”,1000) 间隔多长时间执行函数 要搭配
    (1)先让var timer=setInterval(“要执行的函数名称”,1000(设定时间));
    (2)clearTimeout(timer);清除time。
    可用来做动态效果。

1.5 window综合案例 网页时间倒计时后,跳转到百度

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<p id="p">2</p>
		<input type="button" value="开始" onclick="star()"/>
		<input type="button" value="取消" onclick="stop()"/>
		<script type="text/javascript">
			function star(){
			//倒计时的函数,用时间来控制,因为是动态的所以选用setInterval()
				time=setInterval("getP()",1000);
			}
			function stop(){
			//清除影响
				clearTimeout(time);
			}
			function getP(){
			//找到网页的p标签,用“get..IP”
				var p = document.getElementById("p");
			//找到之后减一
				p.innerHTML=p.innerHTML-1;
			//如果等于零就跳转
				if(p.innerHTML==0){
					location.href="http://www.baidu.com";
				}
			}
		</script>
	</body>
</html>

在这里插入图片描述
取消可以暂停
在这里插入图片描述
之后跳转到百度页面
在这里插入图片描述


二、DOM

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
通过DOM可以访问网页内全部的元素((HTML+CSS)内全部的 标签内容属性值)。

HTML DOM 模型被构造为对象的树。
该内容在之前学习HTML基础的时候有提及。

下图的html的文档可以解析成下列的树形结构。
在这里插入图片描述

2.1DOM的操作分类:

  1. DOM_CORE dom内部的指令;
  2. HTML_DOM 控制html的指令;
  3. CSS_DOM 控制CSS的指令。

2.2 Node

标签element
(1)创建节点
document.createElement(“p”);
(2)删除节点
parent.removeChild(img);
(3)创建父节点
var parent=document.getElementById(“container”);
(4)给父节点建立个孩子
parent.appendChild§;

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<div id="container">
			<img src="img/微信图片_20201012202508.png"/ id="img">		
			<img src="img/微信图片_20201012202508.png"/ id="img">		
			<img src="img/微信图片_20201012202508.png"/ id="img">		
			<img src="img/微信图片_20201012202508.png"/ id="img">		
		</div>
		<script type="text/javascript">
			var p = document.createElement("p");
			p.innerHTML="这就是内容"
			
			var parent=document.getElementById("container")
//			给父节点添加孩子
			parent.appendChild(p);
			var img=document.getElementById("img");
//			将节点放在img的前面 指定位置
			parent.insertBefore(p,img);
			
//			删除
			
//			parent.removeChild(img);
//			到父节点,再找子节点( 当不确定父节点的时候 )
			img.parentNode.removeChild(img);
		</script>
	</body>
</html>

2.3 属性的更改

对于CSS的属性进行设置主要有两种方案
(1)元素.setAttribute(属性名,替换),
(2)元素.属性=替换。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--属性
			设置属性
			(1)setAttribute
			(2)元素.属性=
			
			
		-->
		<img src="img/微信图片_20201012202508.png"  id="logo" width="100px"/>
		
		<input type="button" name="" id="" value="换图"  onclick="changeImg()"/><br />
		
		<input type="text" name="" id="name" value="" />
		
		<input type="button" name="" id="kongjian" value="修改该属性"  onclick="changeArr()"/><br />
		<script type="text/javascript">
			function changeImg(){
				var img = document.getElementById("logo");
//				img.src = "img/微信图片_20200928200600.jpg";
//				更规范
				alert(img.getAttribute("src"));
				img.setAttribute("src","img/微信图片_20200928200600.jpg");
			}
			function changeArr(){
				var name = document.getElementById("name");
				var kongjian = document.getElementById("kongjian");
//				name.type="password";
				if(name.type=="text"){
					name.type="password";
				}else{
					name.type="text";
				}
			}
		</script>
	</body>
</html>

2.3案例 用JS更换图片

有了可以更改属性的设置后,很多复杂的CSS或HTML可以用更换属性值的操作轻松的解决,比如更换图片的CSS案例中,需要用到寻找邻接的兄弟节点的方法,对建立html的结构有着严格的要求,必须要建立成兄弟节点才可以找得到。
但是在JS中,可以通过getElement.Ip(),或者其他的get函数找到我们需要修改的html值,很方便。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<p> 
			选择你最喜欢的书:
			<input type="radio"  value="1" onclick="img_01()" name="book" id="first"/>
			<label for="first">我和我的狗狗一起活下来</label>
			<input type="radio"  value="2" onclick="img_02()" name="book" id="second"/>
			<label for="second">灰霾来了怎么办</label>		
		</p>
		<div>
			<img id="img"/>
			<p id="p"></p>
		</div>
	</body>
	
	<script type="text/javascript">
		function img_01(){
			var img=document.getElementById("img");
			var p = document.getElementById("p");
//			img.src="img/图片1.png";
			img.setAttribute("src","img/图片1.png");
			p.innerHTML="我和我的狗狗一起活下来";
			
		}
		
		
		function img_02(){
			var img=document.getElementById("img");
			var p = document.getElementById("p");
//			img.src="img/图片1.png";
			img.setAttribute("src","img/图片2.png");
			p.innerHTML="灰霾来了怎么办";
			
		}
	</script>
</html>

显示结果:
在这里插入图片描述
在这里插入图片描述

2.3 窗口事件

(1) window.onload

onload 和 onunload 事件会在用户进入或离开页面时被触发。
onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。

onload 和 onunload 事件可用于处理 cookie。
(2)Onclick 当是鼠标点击时后面跟着的函数。
(3)鼠标的事件

  • onmouseenter(当鼠标进入时)

  • onmouseleave(当鼠标离开时)

  • onmousemove(当鼠标移动时)

  • onmouseover(当鼠标悬浮时)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			p{
				width: 100px;
				height: 100px;
				border: 1px solid red;
			}
		</style>
	</head>
	<body>
		<p οnmοuseenter="doEnter()" οnmοuseleave="doLeave()" 
			<!--οnmοusemοve="doMove()"--> 
			οnmοuseοver="doOver()"></p>
	</body>
	<script type="text/javascript">
//		window.οnlοad=function(){
//			alert("ssnfofnidaon");
//		}
		function doEnter(){
			console.log("enter------")
		}
		
		function doLeave(){
			console.log("leave------")
		}
		
//		function doMove(){
//			console.log("move------")
//		}
		function doOver(){
			console.log("Over------")
		}
	</script>
</html>

(4)键盘的事件
(1)οnkeyup="";当键盘摁下的时候,触发的事件;
(2)οnkeydοwn="";当键盘弹起的时候,触发的事件。
一般来说,两个方法可以获取全部的键盘字符。

“13”是回车的数字字符。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--<input type="" name="" id="" value="" οnkeyup="doUp()" />-->
		<input type="" name="" id="" value="" onkeydown="doDown()" />
	</body>
	
	<script type="text/javascript">
		function search(){
			alert("开始搜索")
		}
		
		function doUp(){
//			if(event.keyCode==13)
//			{search()}
			alert(event.keyCode)
		}
		function doDown(){
//			if(event.keyCode==13)
//			{search()}
			alert(event.keyCode)
			}
		
	</script>
</html>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Le`soleil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值