Web-Day7笔记

一、DOM

1.常用的方法

a.创建

​ createElement():创建标签节点

​ createTextNode():创建文本节点

​ createAttribute():创建属性节点

b.增

​ appendChild():将新的子节点添加到指定节点的末尾

​ insertBefore():在某个子节点的前面插入指定节点

c.删

​ removeChild():删除子节点

​ removeAttribute():删除属性节点

d.改

扫描二维码关注公众号,回复: 5416358 查看本文章

​ repalceChild():替换子节点

​ setAttribute():将指定属性设置或者修改为指定的值

e.查

​ getElementByXxxx:获取节点对象

​ getAttribute():返回指定的属性值

f.克隆

​ cloneNode():复制一个新的指定节点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<ul>
			<li>111</li>
			<li>222</li>
			<li>333</li>
			<li>444</li>
			<!--<li>555</li>-->
		</ul>
		
		<input type="button" value="add" onclick="func1();" />
		
		
		<script type="text/javascript">
             //父节点对象.appendChild(子节点对象)
			function func1(){
				//1.创建标签节点li
				var liEle = document.createElement("li");
			
			
				//2.创建文本节点555
				var liText  = document.createTextNode("555");
				
				
				//3.将文本节点添加为标签节点的子节点
				liEle.appendChild(liText);
				
				
				//4.获取父节点对象
				var ulEle = document.getElementsByTagName("ul")[0];
				
				
				//5.将li子节点添加为ul的子节点
				ulEle.appendChild(liEle);
			}
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<ul>
			<li>111</li>
			<li>222</li>
			<!--<li>555</li>-->
			<li id="li3">333</li>
			<li>444</li>
			
		</ul>
		
		<input type="button" value="insert" onclick="func1();" />
		
		
		<script type="text/javascript">
			
			
			//父节点对象.insertBefore(新的节点,旧的节点)
			
			function func1(){
				//1.创建标签节点li
				var liEle = document.createElement("li");
			
			
				//2.创建文本节点555
				var liText  = document.createTextNode("555");
				
				
				//3.将文本节点添加为标签节点的子节点
				liEle.appendChild(liText);
				
				
				//4.获取父节点对象
				var ulEle = document.getElementsByTagName("ul")[0];
				
				
				//5.获取指定节点对象
				var li3 = document.getElementById("li3");
				
				
				//6.插入
				ulEle.insertBefore(liEle,li3);
				
			}
			
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<ul>
			<li>111</li>
			<li>222</li>
			<li id="li3">333</li>
			<li>444</li>
			<li>555</li>
			
		</ul>
		
		<input type="button" value="remove" onclick="func1();" />
		
		
		<script type="text/javascript">
			
			
			//父节点对象.removeChild(被删除的节点对象)
			
			function func1(){
				
				
				//1.获取父节点对象
				var ulEle = document.getElementsByTagName("ul")[0];
				
				
				//2.获取需要被删除的节点对象
				var li3 = document.getElementById("li3");
				
				
				//3.删除
				ulEle.removeChild(li3);
				
			}
			
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<ul>
			<li>111</li>
			<li>222</li>
			<li id="li3">333</li>    
			<li>444</li>
			<li>555</li>
			
		</ul>
		
		<input type="button" value="replace" onclick="func1();" />
		
		
		<script type="text/javascript">
			
			
			//父节点对象.replaceChild(new,old)
			
			function func1(){
				
				
				//1.获取父节点对象
				var ulEle = document.getElementsByTagName("ul")[0];
				
				
				//2.获取需要被替换的节点对象
				var li3 = document.getElementById("li3");
				
				
				//3.创建标签节点li
				var liEle = document.createElement("li");
			
			
				//4.创建文本节点666
				var liText  = document.createTextNode("666");
				
				
				//5.将文本节点添加为标签节点的子节点
				liEle.appendChild(liText);
				
				//6.替换
				ulEle.replaceChild(liEle,li3);
				
			}
			
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<input type="text" name="tex" id="inputid" value="aaa" />
		<script type="text/javascript">
			//1.获取input标签对象
			var input = document.getElementById("inputid");
			
			//2.获取属性值
//			alert(input.value);


			//使用getAttribute(),了解,直接通过对象.属性的方式常用
//			alert(input.getAttribute("value"));
			
			
			//alert(input.getAttribute("class")); //null
			
			
			//3.setAttribute(属性,值):给某个属性设置具体的值
			input.setAttribute("class","cls");
			//alert(input.getAttribute("class"));
			
			
			//4.removeAttribute(属性):删除属性
			alert(input.getAttribute("name"));
			input.removeAttribute("name");
			alert(input.getAttribute("name"));
				
		</script>
	</body>
</html>

2.常用的属性

a.innerHTML:几乎所有的浏览器都支持该属性,但是,不属于DOM的组成部分

​ 作用:获取文本内容,给标签对象设置文本内容【内容包括纯文本和html代码】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<span id="spanid">哈哈哈哈哈</span>
		<div id="box"></div>
		
		
		
		
		
		<script type="text/javascript">
			//1.获取span标签的节点对象
			var span = document.getElementById("spanid");
			
			//作用一:获取文本内容
			//alert(span.innerHTML);
			
			
			//2.作用二:设置文本内容
			
			
			//2.1设置纯文本
			/*
			 * var a = createTextNode("aaaa")
			 * div.appendChild(a)
			 */
			var div = document.getElementById("box");
			//div.innerHTML = "aaaaa";
			
			//2.2设置html内容
			/*
			 * var a = createTextNode("aaaa")
			 * var h = createElement("h1");
			 * h.appendChild(a);
			 * div.appendChild(h)
			 */
			
			//div.innerHTML = "<h1>aaaa</h1>";
			
			
			div.innerHTML = "<table border='1'><tr><td>aaaa</td><td>bbbb</td></tr><tr><td>tttt</td><td>hyj</td></tr></table>";
			
		</script>
	</body>
</html>

b.节点属性

​ nodeName:节点的名称

​ 元素节点:标签名称【大写】

​ 属性节点:属性名称

​ 文本节点:#text

​ 文档节点:#document

​ nodeValue:节点值

​ 元素节点:undefined / null

​ 属性节点:属性的值

​ 文本节点:文本本身

​ nodeType:节点类型

​ 元素节点:1

​ 属性节点:2

​ 文本节点:3

​ 文档节点:9

​ 注释:8

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<span id="spanid">hahahahh </span>
		<br />
		<script type="text/javascript">
			
			//1.标签节点
			var span = document.getElementById("spanid");
			
			document.write(span.nodeName);   //SPAN
			document.write(span.nodeValue);	//null  undefined
			document.write(span.nodeType);	  //1
			
			document.write("<br />");
			
			//2.属性节点
			var id = span.getAttributeNode("id");
			document.write(id.nodeName);   //id
			document.write(id.nodeValue);	//spanid
			document.write(id.nodeType);	  //2
			
			document.write("<br />");
			
			//3.文本节点
			//文本节点排列在属性节点的前面
			var text1 = span.firstChild;
			document.write(text1.nodeName);   //#text
			document.write(text1.nodeValue);	//hahahahh
			document.write(text1.nodeType);	  //3
			
		</script>
	</body>
</html>

c.父子节点,兄弟节点

​ childNodes:通过父节点获取子节点,注意:子节点可能有多少个【注意:html标签中的空白符】

​ parentNode:通过子节点获取父节点 ,注意:document没有父节点

​ firstChild/lastChild

​ nextSibling:获取同辈节点,获取指定节点的下一个同辈节点

​ previousSibling:获取同辈节点,获取指定节点的上一个同辈节点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<ul id="ulid"><li>111</li><li id="li2">222</li><li id="li3">333</li><li id="li4">444</li><li>555</li></ul>
		
		<script type="text/javascript">
			//1.通过父节点获取子节点
			//注意:考虑空白符的存在,空白符会被识别为文本节点
			var ulEle = document.getElementById("ulid");
			var result1 = ulEle.childNodes;
			document.write(result1);
			document.write(result1.length);  //11
			
			document.write("<br />");
			
			
			var child1 = ulEle.firstChild;
			var child2 = ulEle.lastChild;
			document.write(child1.nodeName);
			document.write("<br />");
			document.write(child2.nodeName);
			
			
			//2.通过子节点获取父节点
			var li3 = document.getElementById("li3");
			var ulEle2 = li3.parentNode;
			
			
			//3.获取同辈节点
			var li3 = document.getElementById("li3");
			var subli1 = li3.nextSibling;
			var subli2 = li3.previousSibling;
			document.write(subli1.id);
			document.write("<br />");
			document.write(subli2.id);
			
		</script>
	</body>
</html>

d.attributes:获取属性节点

e.value:标签的值【input】

3.事件【重点掌握】

3.1模式

html和js的结合方式

分类:

​ a.内联模式:在html标签中通过属性的方式给标签添加事件,例如:onclick

​ b.脚本模式:弥补了内联模式的缺点【未达到js和html的分离】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--内联模式
			
			将js中的事件或者js代码和html标签结合在一起使用
			
		-->
		<button onclick="func1();">点击一</button>
		
		
		<button onclick="alert('hhahah')">点击二</button>
		
		<script type="text/javascript">
			
			
			function func1(){
				alert("hello");
			}
			
		</script>
		
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--脚本模式
			
			将js和html分离,
			语法:
			标签对象.事件 = function(形参列表){
				
			}
			
			
			事件组成:on + 事件名称
				例如:onload   onscroll   onclick ondblclick     onmousedown   onmouseup等	
				
				
			结论:在实际项目开发中,尽量做到html,css,js的分离
			
		-->
		<button id="btn1">点击一</button>
		
		
		<button id="btn2">点击二</button>
		
		<script type="text/javascript">
			
			//1.获取按钮的对象
			var btn1 = document.getElementById("btn1");
			//2.添加单击事件
			btn1.onclick = function(){
				alert("hello");
			}
			
		</script>
		
	</body>
</html>
3.2事件对象

事件对象一般称为event对象,该对象是浏览器通过函数将该对象作为参数传递过来的

默认的情况下,event对象是隐藏的,只有跟事件有关的函数才有该参数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<input type="button" id="inputid" value="按钮"/>
		<script type="text/javascript">
			//普通函数
			function func1(){
				//arguments:js中的全局对象,表示函数的参数
				console.log(arguments.length);
			}
			func1();
			
			
			//匿名函数:跟事件有关
			var inputObj = document.getElementById("inputid");
			
			//注意:但凡使用js中的事件,在函数中都会有一个隐藏的参数,表示事件对象,
			//如果需要使用该对象,则可以显式的写出来,只要是一个合法的标识符即可,一般采用event
			inputObj.onclick = function(event){
				console.log(arguments.length);
				//console.log(arguments[0]);
				console.log(event);
				
				//事件对象根据不同的浏览器可能不同,为了兼容不同的浏览器
				//非IE和IE之间的区别
				var e = event || window.event;
				
			}
			
		</script>
	</body>
</html>
3.3鼠标事件

click:单击或者按下回车键

dblclick:双击

mousedown:按下鼠标

mouseup:抬起鼠标

mouseover:鼠标悬浮

mouseout:鼠标从标签上移出

mousemove:鼠标在标签上移动

submit:表单事件【当表单数据不正确的时候可以阻止表单提交】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box{
				width: 300px;
				height: 300px;
				background-color: cyan;
			}
		</style>
	</head>
	<body>
		<div id="box"></div>
		<!--
			注意:所有的html标签都可以绑定鼠标事件
		-->
		<script type="text/javascript">
			//获取div标签对象
			var divObj = document.getElementById("box");
			
			//绑定鼠标事件
			//单击
			/*divObj.onclick = function(){
				//js操作css
				//注意:标签对象.style.属性 = “值”;
				divObj.style.backgroundColor = "orange";
			}
			
			//双击
			divObj.ondblclick = function(){
				divObj.style.backgroundColor = "orange";
			}*/
			
			
			//悬浮
			divObj.onmouseover = function(){
				divObj.style.backgroundColor = "orange";
			}
			
			divObj.onmouseout = function(){
				divObj.style.backgroundColor = "cyan";
			}
			
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#msg_id{
				width: 200px;
				/*高度随着内容的多少自适应*/
				height: auto;  
				background-color: gray;
				border: 1px solid white;
				/*初始化下状态,隐藏
				 * 则表示该元素不会占用位置的,相当于该元素根本不存在
				 */
				display: none;
				
				/*定位*/
				position:absolute ;
			}
			
			#div1 a{
				/*
				 * a是典型的行内标签,不会自动换行,设置了宽高和内外边距不起作用
				 */
				margin: 30px;
				display: inline-block;
				
			}
		</style>
	</head>
	<body>
		<div id="div1">
			<a href="#">大娃(红娃)</a><br />
			<a href="#">二娃(橙娃)</a><br />
			<a href="#">三娃(黄娃)</a><br />
			<a href="#">四娃(绿娃)</a><br />
			<a href="#">五娃(青娃)</a><br />
			<a href="#">六娃(蓝娃)</a><br />
			<a href="#">七娃(紫娃)</a><br />
			<a href="#">葫芦小金刚</a><br />
			<!--显示简介-->
			<div id="msg_id"></div>
		</div>
		
		<script type="text/javascript">
			//当当前html页面中所有的内容加载完毕之后,使用js操作
			window.onload = function(){
				//1.获取标签对象
				var oDiv = document.getElementById("div1");
				var msgDiv = document.getElementById("msg_id");
				var oAs = oDiv.getElementsByTagName("a");
				
				var arrMsg = ["力大无穷,巨大化。(弱点:比较鲁莽,不知随机应变)",
				"千里眼,顺风耳,灵活聪明,机敏过人,最善于谋划计策(弱点:攻击力与其兄弟相比较过于弱小了,眼睛和耳朵太脆弱)", 
				"铜头铁臂,钢筋铁骨,刀枪不入(弱点:第一部中根本就是没有弱点,但可以以柔克刚降服他。可是到了第二部就被强行加入了一个致命弱点:怕打屁股。性急骄傲)。",
				"喷火,吸火,霹雳(弱点:受不了激将法,也怕冷)", "吸水,吐水,口吐闪电产生降雨(弱点:水火不相溶,意气用事。第一部中水娃的能力也是没有弱点的,不用吸水也能喷水喷得无穷无尽。到了第二部就变得需要先吸水才能吐水,水量有限。)",
				"隐身术,透体术,来无影去无踪,聪明机灵,最善于偷盗和行动(弱点:太顽皮。在第一部里能够在被金蛇冰封的情况下透体而出,在第二部前半段能够使用透体术逃出鳄鱼头领爪子的紧紧捉拿,直到被捉的那一下透体术就使不出来了)", 
				"最小,没多大本领,倍受哥哥们的关爱,有宝葫芦,可以吸入魔法、兵器和妖怪,在第一部刚出世时蒙蔽双眼,十分听从妖精的话,把六位哥哥吸进宝葫芦。(弱点:失去宝葫芦,到第二部中宝葫芦那么容易就碎了)", 
				"葫芦娃的合体,七颗葫芦娃的心都溶在他的胸中,七个葫芦娃的本领都长在他的身上,同时也具有七个葫芦娃的弱点。他大闹妖精洞府后,闯入十八层地道,毁掉青蛇精的两件宝物。后变成一座大山,镇压了青蛇精."];
				
				//2.遍历a标签的集合,给a添加鼠标事件
				for(var i = 0;i < oAs.length;i++){
					//oAs[i]:每个超链接的标签对象
					
					//index属性:循环的时候,如果想要给每个标签对象做一个标记,方便后续取数组中对应的信息
					oAs[i].index = i;
					
					//2.1移入的时候,文字颜色变成橙色,将标签a位置对应的div显示出来
					//this代表的是当前标签对象
					oAs[i].onmouseover = function(){
						this.style.color = "orange";
						//显示出来
						msgDiv.style.display = "block";
						//设置文字简介
						msgDiv.innerHTML = arrMsg[this.index];
					}
					
					//2.2移出的时候,颜色变为蓝色,将div隐藏
					oAs[i].onmouseout = function(){
						this.style.color = "blue";
						//隐藏
						msgDiv.style.display = "none";
					}
					
					//2.3当鼠标在a上左右上下移动的时候
					oAs[i].onmousemove = function(event){
						//注意:追踪鼠标的坐标,所有的坐标和event对象有关
						
						var e = event || window.event;
						
						msgDiv.style.display = "block";
						
						//div随着鼠标的移动而移动
						//在事件对象中,clientX,clientY
						msgDiv.style.left = e.clientX + 5 + "px";
						msgDiv.style.top = e.clientY + 5 + "px";	
					}
					
				}
				
				
			}
		</script>
	</body>
</html>

表单事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			span{
				display: none;
				color: red;
				font-size: 13px;
			}
		</style>
	</head>
	<body>
		<form id="form" action="#" method="get">
			
			<input type="text" name="username" placeholder="请输入用户名" id="user"/>
			<span id="userspan">*用户名格式不正确</span>
			<br />
			<input type="password" name="pwd" placeholder="请输入密码" id="pwd" />
			<span id="pwdspan">*密码必须是六位</span>
			<br />
			<input type="submit" value="提交数据" />
		</form>
		
		<script type="text/javascript">
			window.onload = function(){
				//获取form标签对象
				var formObj = document.getElementById("form");
				//获取用户名和密码的标签对象,目的为了获取input的value设置
				var userInput = document.getElementById("user");
				var userSpan = document.getElementById("userspan");
				var pwdInput = document.getElementById("pwd");
				var pwdSpan = document.getElementById("pwdspan");
				
				
				//给表单标签对象添加事件 
				//submit事件:如果该事件的函数返回值为false,则表示需要阻止表单提交
				formObj.onsubmit = function(){
					
					if(userInput.value.length > 10 || userInput.value.length < 6){
						//让对应的span显示出来
						userSpan.style.display = "inline-block";
						
						//阻止表单提交
						return false;
					}else{
						
						if(pwdInput.value.length != 6){
							//让对应的span显示出来
							pwdSpan.style.display = "inline-block";
						
							//阻止表单提交
							return false;
						}else{
							alert("表单提交成功");
						}	
					}
				}
			}
		</script>
		
	</body>
</html>
3.4键盘事件

keydown:按下键盘的任意键【连续调用】

keyup:抬起键盘的任意键【连续调用】

keypress:按下键盘的非功能键

​ 功能键:ctrl,shift,alt,enter,capslock ,numlock等

注意:键盘事件一般绑定给document对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			document.onkeydown = function(e){
				//
				var event = e || window.event;
				
				console.log(event);
				
				//event.altKey,event.ctrlKey,event.shiftKey的值为布尔值,如果被按下,值为true
				//keyCode:当前被按下的键对应的编码【数字和字母,keycode实质上是ASCII码】
				console.log(event.altKey,event.ctrlKey,event.shiftKey,event.keyCode);
				
			}
			
			document.onkeyup = function(e){
				//
				var event = e || window.event;
				
				console.log(event);
				
				console.log(event.altKey,event.ctrlKey,event.shiftKey,event.keyCode);
			}
			
			document.onkeypress = function(e){
				//
				var event = e || window.event;
				
				console.log(event);
				
				console.log(event.altKey,event.ctrlKey,event.shiftKey,event.keyCode);
			}
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box{
				width: 100px;
				height: 100px;
				background-color: cyan;
				position: absolute;
			}
		</style>
	</head>
	<body>
		<!--
			div,
			1.按下shift + f键随机修改背景颜色
			2.通过上下左右键控制div的移动
		-->
		<div id="box"></div>
		<script type="text/javascript">
			//获取div的对象
			var div = document.getElementById("box");
			
			//添加键盘事件
			document.onkeydown = function(e){
				var event = e || window.event;
				
				if(event.shiftKey == true && event.keyCode == 70){
					//rgb(r,g,b).取值范围为0~255
					
					var r = parseInt(Math.random() * 256);
					var g = parseInt(Math.random() * 256);
					var b = parseInt(Math.random() * 256);
					
					
					div.style.backgroundColor = "rgb(" + r + "," + g + "," + b + ")";
				}
			}
			
			
			//添加监听事件
			document.addEventListener("keydown",func1,false);
			function func1(e){
				var event = e || window.event;
				
				switch(event.keyCode){
					//左键
					case 37:{
						div.style.left = div.offsetLeft - 5 + "px";
						break;
					}
					case 38:{
						div.style.top = div.offsetTop - 5 + "px";
						break;
					}
					case 39:{
						div.style.left = div.offsetLeft + 5 + "px";
						break;
					}
					case 40:{
						div.style.top = div.offsetTop + 5 + "px";
						break;
					}
					default:{
						
					}
					
				}
				
				
			}
			
		</script>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_41470296/article/details/87732855