DOM对象、JS-form表单

导读:本篇文章讲解 DOM对象、JS-form表单,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、DOM对象

1.理解

DOM赋予了操作页面的能力
​ 可以通过DOM,创建元素,插入,修改,删除页面中的内容
​ html中的内容被被js解析成为DOM树
​ html中所有内容都是节点
​ ttml文档->文档节点
​ 元素|标签->元素节点
​ 属性 ->属性节点
​ 标签对中的文本 ->文本节点

2.获取元素节点方式

​ 1.document.getElementById(“id属性值”)
​ 获取到页面中某一个元素节点

​ 2.主语.getElementsByClassName(“Class属性值”)
​ 通过元素Class属性值获取到一个或多个元素节点
​ 主语:document|元素节点
​ 3.主语.getElementsByTagName(“标签名”)
​ 通过元素的标签名获取到一个或者一组元素
​ 主语:document|元素节点
​ 4.document.getElementsByName(“name属性值”)
通过Name属性值获取一组元素
一般在表单元素身上会有name属性**,name属性的作用为后台区分前台元素的唯一,如果没有name,标签元素没有提交数据的能力**

 <ul id="ul">
		 	<li>ul-li1</li>
			<li class="greend">ul-li2</li>
			<li>ul-li3</li>
		 </ul>
		 <ol>
			 <li>ol-li1</li>
			 <li>ol-li2</li>
			 <li class="greend">ol-li3</li>
		 </ol>
		 <form action="">
		 	<input type="radio" name="gender" value='man'>
		 	<input type="radio" name="gender"  value='woman'>
		 	<input type="submit">
		 </form>
		 <script type="text/javascript">
		 	var ul=document.getElementById("ul");
			//class属性值
			//主语是document,在整个文档找
			var lis1=document.getElementsByClassName("greend");
			console.log(lis1);
			//主语是ul节点,在ul中去找
			var lis2=ul.getElementsByClassName("greend");
			console.log(lis2);
			//标签名
			//主语document
			var li1=document.getElementsByTagName("li");
			console.log(li1);
			//主语是ul节点
			var li2=ul.getElementsByTagName("li");
			console.log(li2);
			//name属性值
			var names=document.getElementsByName("gender");
			console.log(names);
			
			var names=document.getElementsByName("gender");
			console.log(names);
		 </script>

3.创建节点

创建节点
document.createElement(“元素名”); 创建元素节点
document.createTextNode(“文本”) 创建文本节点
插入节点
​ 父节点.appendChild(子节点)
​ 子节点追加到父节点中的最后位置
​ 父节点.insertBefore(节点1,节点2)
​ 节点1: 新节点
​ 节点2: 参照节点
​ 返回插入的节点
​ 必须有2个参数
第二个参数null,undefined都相当于追加,作用与appendChild相同

<button type="button" onclick="fn()">点击</button>
		 <script type="text/javascript">
		 	function fn(){
				//创建节点
				var box=document.createElement("div");
				box.style.height="500px";
				box.style.background="pink";
				//创建p标签
				//var p=document.createElement("p");
				//p添加到文本节点
				//var text=document.createTextNode("明天的你会感谢今天努力的自己");
				//p.appendChild(text);
				//p.innerHTML="今天你努力了吗?";
				//box.appendChild(p);
				//追加到最后
				//document.body.appendChild(box);
				
				//第二种方法
				box.innerHTML="<p>今天你努力了吗?</p>";
				//插入到btn之后
				var btn=document.getElementsByTagName("button")[0];
				//document.body.appendChild(box);
				//插入到btn之前
				//document.body.insertBefore(box,btn);
				//第二个参数null,undefined都相当于追加,作用与appendChild相同
				document.body.insertBefore(box,null);
				console.log(document.body.insertBefore(box,null));
			}
		 </script>

4.间接查找节点

childNodes 返回元素的一个子节点的数组
firstChild 返回元素的第一个子节点
lastChild 返回元素的最后一个子节点
nextSibling 返回元素的下一个兄弟节点
parentNode 返回元素的父节点
previousSibling 返回元素的上一个兄弟节点

<div>
			<ul class="box">
				<li>篮球</li>
				<li>乒乒球</li>
				<li>足球</li>
				<li>网球</li>
			</ul>
			<ol>
				<li>排球</li>
				<li>羽毛球</li>
			</ol>
		</div>
		<script type="text/javascript">
			var ul=document.getElementsByClassName("box")[0];
			console.log(ul);
			console.log(ul.childNodes);//全部子节点
			console.log(ul.firstChild);//#text 第一个节点
			console.log(ul.firstElementChild);//第一个元素节点
			console.log(ul.lastChild);//#text 最后一个节点
			console.log(ul.lastElementChild);//最后一个元素节点
			console.log(ul.firstElementChild.nextSibling);//#text 下一个兄弟节点
			console.log(ul.firstElementChild.nextElementSibling);//第一个元素的下一个兄弟元素节点
			console.log(ul.lastElementChild.previousElementSibling);//最后一个元素上个兄弟元素节点
			console.log(ul.parentNode);//返回元素父节点
		</script>

5.点击字节点隐藏案例

<!-- 练习: 
				ul列表,列表中有5个子元素li,每一个li中定义span,span中定义内容
				点击span,把父元素li隐藏
		-->
		<ul>
			<li><span>唱歌</span></li>
			<li><span>跳舞</span></li>
			<li><span>跑步</span></li>
			<li><span>打游戏</span></li>
			<li><span>追剧</span></li>
		</ul>
		<script type="text/javascript">
			var span=document.getElementsByTagName("span");
			//遍历数组,给每个span绑定点击事件
			for(var i=0;i<span.length;i++){
				span[i].onclick=function fn(){
					//当前对象->被点击的span节点,可变的
					//console.log(this.parentNode.parentNode);
					console.log(this.parentNode);
					this.parentNode.style.display="none";
				}
			}
		</script>

6.留言板案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			ul{
				width: 500px;
				height: 500px;
				border:1px solid black;
			}
		</style>
	</head>
	<body>
		<input type="text" name="uname" id="uid" value="" />
		<input type="submit" value="提交" id="su" onclick="fn()"/><br>
		<ul id="ul">
			
		</ul>
		<script type="text/javascript">
			//var uname=document.getElementsByTagName("uname")[0];
			//console.log(uname);
			var uid=document.getElementById("uid");
			//console.log(uid.value);
			//var submit=document.getElementById("su");
			var ul=document.getElementById("ul");
			function fn(){
				//创建li
				var li=document.createElement("li");
				//添加内容
				li.innerHTML=uid.value;
				//添加li在ul中后面追加
				//ul.appendChild(li);
				//把li放在ul中,插入到ul元素的最上面
				ul.insertBefore(li,ul.firstElementChild);
			}
			// uname.οnkeydοwn=function(){
			// 	// event 事件源对象
			// 	if(event.keyCode==13){
			// 			fn();
			// 	}
			// }
		
		</script>
	</body>
</html>

7.删除节点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- 
			移出子节点
				父节点.removeChild(子节点)
		 -->
		 <input type="text" name="info"><button type="button">删除</button>
		 <script type="text/javascript">
		 	var btn=document.getElementsByTagName("button")[0];
			var info=document.getElementsByName("info")[0];
			btn.onclick=function(){
				document.body.removeChild(info);
			}
		 </script>
	</body>
</html>

8.替换节点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- 
			替换节点:
				父节点.replaceChild(节点1,节点2);
				节点1:是新节点
				节点2:老节点
				返回值被替换的节点
				如果新节点为父节点已有节点,效果老节点删除,被替换成为新节点
		 -->
		<ul id="box">
			<li>li1</li>
			<li>li2</li>
			<li>li3</li>
			<li>li4</li>
		</ul>
		 <script type="text/javascript">
		 	var box=document.getElementById("box");
			//创建一个新的li节点
			var newli=document.createElement("li");
			//添加内容
			newli.innerHTML="越努力也幸运!!!!";
			//替换节点,返回被替换的节点
			console.log(box.replaceChild(newli,box.firstElementChild));
			//li4
			console.log(box.lastElementChild);
			//li3
			console.log(box.lastElementChild.previousElementSibling);
			//li4替换li3如果新节点为父节点已有节点
			//,效果老节点删除,被替换成为新节点
			box.replaceChild(box.lastElementChild.previousElementSibling,box.lastElementChild);
		 </script>
	</body>
</html>

9.克隆节点

节点.cloneNode(boolean) 克隆节点
true 当前节点包含其字内容全部克隆
false 只克隆当前节点,属性+属性值会克隆,id值也会相同需要修改
html属性,css样式+js功能如果定义在标签上标签上的内容都会被克隆
​ ,但是js中的css中单独的语法,不会被克隆

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			/* html属性,css样式+js功能如果定义在标签上标签上的内容都会被克隆,但是js中的css中单独的语法,不会被克隆 */
			#box{
				font-size: 30px;
			}
		</style>
	</head>
    <body>
		<div id="box" style="background: skyblue;">
		 	<h3>哈哈哈哈<span>嘿嘿嘿嘿嘿嘿</span></h3>
		 </div>
		 <script type="text/javascript">
		 	var box=document.getElementById("box");
			box.onclick=function(){
				console.log(456);
			}
			//克隆
			var newNode=box.cloneNode(true);
			document.body.appendChild(newNode);
			console.log(newNode);
			newNode.id="box2";
			//自定义属性,html标签上不会显示,但是js中可以通过写法某个元素绑定自定义属性,可以存储值
			newNode.index=15;
			newNode.hhh="哈哈哈";
			console.log(newNode.index,newNode.hhh);
		 </script>
	</body>
</html>

10.innerHTML和innerText区别

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- innerHTML和innerText区分 -->
		<div class="div1">
			<p>div1</p>
		</div>
		<div class="div2">
			<p>div2</p>
		</div>
		<script type="text/javascript">
			//获取二个div中的内容
			var div1=document.getElementsByClassName("div1")[0];
			var div2=document.getElementsByClassName("div2")[0];
			//读取内容
			console.log(div1.innerHTML);
			console.log(div2.innerText);
			//设置div标签中的内容
			//覆盖
			div1.innerHTML="哈哈哈div1";
			div2.innerText="嘿嘿嘿div2";
			//区分
			//innerHTML可以往标签中添加|读取html节点|再原本内容添加内容
			div1.innerHTML+="<h1>我是标题div</h1>";
			//innerText只能读取或添加文本内容
			div2.innerHTML="哈哈哈哈div2";
		</script>
	</body>
</html>

11.属性操作

方法**|**属性 描述
getAttribute() 返回指定元素的属性值
getAttributeNode() 返回指定属性节点
element.id 设置或者返回元素的 id
setAttribute() 设置或者改变指定属性并指定值
setAttributeNode() 设置或者改变指定属性节点
element.style 设置或返回元素的样式属性
element.className 设置或返回元素的class属性
element.classList 返回元素的类名
	<input type="text" value="加油,胜利就在眼前" id="txt" class="test" />
        <br />
	性别:<input type="radio" checked="true" name="sex" value="1"><input type="radio" name="sex" value="0"><br />
	<img src="img/timg.jpg" id="sxtimg" title="sxt" />

	<script type="text/javascript">
		var txt = document.getElementById("txt");
		var sxtimg = document.getElementById("sxtimg");
		var sex = document.getElementsByName("sex")[0];
		
		// 获取值
		// txt.getAttribute("class")// IE 不支持
		// txt.getAttribute("className") //IE支持
         // 浏览器兼容操作
		var clz = (txt.getAttribute("class") == 'undefined') ? txt.getAttribute("className") : txt.getAttribute("class");
		console.log(txt.getAttribute("id") + "-->" + txt.getAttribute("value") + "-->" + clz);
		console.log(txt.value);  // 获取文本
		console.log(sex.checked);  // 获取状态是否选中

		// 修改值
		txt.className = 'test1';
		sxtimg.style.display = 'none';
		txt.setAttribute("value", "success");
		txt.setAttribute("aaa", "000000"); // 自定义属性
		console.log(txt.getAttribute("aaa")); // 获取自定义属性值
		
		// 删除属性
		txt.removeAttribute("aaa");
		console.log(txt.getAttribute("aaa"));
	</script>

二、JS-form表单

	<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//待页面中的内容全部加载完成之后再去触发这个事件
			// window.οnlοad=function(){
			// 	console.log(document.getElementById("box"));
			// }
		</script>
	</head>
	<body>
		<form action="" method="" name="myForm" id="box" onsubmit="return haha_onsubmit()">
			<p>
				名字:<input type="text" name="uname" />
				<button type="button" onclick="console.log(form1.uname.value);">测试</button>
			</p>
			<p>
				性别:<input type="radio" name="gender" value="man"><input type="radio" name="gender" value="woman"><button type="button" onclick="func_radio()">测试</button>
			</p>
			<p>
				爱好:<input type="checkbox" name="hobby" value="code" />敲代码
				<input type="checkbox" name="hobby" value="play" />打游戏
				<input type="checkbox" name="hobby" value="read" />看书
				<button type="button" onclick="func_checkbox()">测试</button>
			</p>
			<p>
				地区:<select name="area" id="">
					<option value="1">上海</option>
					<option value="2">浙江</option>
					<option value="3">江西</option>
					<option value="4">广东</option>
				</select>
				<button type="button" onclick="func_select()">测试</button>
			</p>
			<p>
				<input type="submit" onclick="return haha_submit()" />
				<input type="button" value="按钮" onclick="haha_button()"/>
				<button>submit</button>
			</p>
			<script type="text/javascript">
				//获取表单  根据id
				var form1=document.getElementById("box");
				//根据表单nam值
				//var form2=document.myForm;
				//console.log(form2);
				//获取表单中的元素节点
					//id属性,name属性,标签名,class都可以获取
					//表单节点.表单元素name属性值
				//1.表单元素.value
				function func_radio(){
					console.log(form1.gender.value);
				}
				//多选按钮
				function func_checkbox(){
					var arr=form1.hobby;
					for(var i=0;i<arr.length;i++){
						//多选框中被选中的value值
						if(arr[i].checked){
							console.log(arr[i].value);
						}
					}
				}
				//select下拉框
				function func_select(){
					console.log(form1.area);//整个select
					console.log(form1.area.options);//所有的下拉列表选项
					console.log(form1.area.selectedIndex);//被选中的下拉列表选项的索引
					console.log(form1.area.options[form1.area.selectedIndex].value);//value值
					console.log(form1.area.options[form1.area.selectedIndex].innerHTML);//标签内容
					//获取所有option
					var arr=form1.area.options;
					for(var i=0;i<arr.length;i++){
						if(arr[i].selected){
							console.log(arr[i].index,arr[i].value,arr[i].innerHTML);
						}
					}
				}
				//submit()提交方法
				//表单的提交
				//1.button+onclick+submit()
				function haha_button(){
					if(form1.uname.value!=''){
						form1.submit();
					}else{
						console.log("用户名不能为null");
					}
				}
				//2.submit->onclick->return 函数名;->当点击提交的时候,会
				//在提交之前,在调用的函数中,进行校验,如果不满足情况,
				//就return false->会组织提交按钮的提交
				function haha_submit(){
					if(form1.uname.value==""){
						console.log("用户名不能为null");
						return false;
					}
				}
				//3.submit->表单上添加onsubmit事件
				//->return 函数名()->函数中不满足情况return false,就不提交
				function haha_onsubmit(){
					if(form1.uname.value==""){
						console.log("用户名必须为6个字符");
						return false;
					}
				}
				/*
								表单中常用的事件:
									焦点事件  失焦 聚焦
									键盘事件
									鼠标事件
									文档事件 window.onload
									
									onchange 修改内容并且失焦以后再触发
									oninput 输入内容触发
							*/
				form1.uname.oninput=function(){
							   console.log(111);
				}
				form1.uname.onchange=function(){
						console.log(456);
				}
			</script>
		</form>
	</body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/121477.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!