JavaScript(DOM的使用一)

   本文章讲述的DOM的一些使用

一、节点的查询和遍历:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		
		<h1 id="dom">DOM document Object Model</h1>
		<p>你好1</p>
		<p>你好2</p>
		<p>你好3</p>
		<h1>dom的节点查询</h1>
		<form action="">
			爱好:<br>
			<input type="checkbox" name="fav" id="">lol <br>
			<input type="checkbox" name="fav" id="">dnf  <br>
			<input type="checkbox" name="fav" id="">麻将  <br>
		</form>
		<script>
			// 节点的遍历,就是把获到的节点列表挨个输出
			// 01 for 循环来遍历
			var ps = document.getElementsByTagName("p");
			// for(var i = 0; i<ps.length;i++){
			// 	console.log(ps[i],ps[i].innerText);
			// }
			// 02 转换为数组后forEach
			// Array.from()把类数组元素转换为数组
			// foreach数组的高阶函数(遍历),传入一个回调函数function
			// 数组元素有多少个 function就会执行多少次
			// elem 当前被遍历的元素
			var arr = Array.from(ps)
			arr.forEach(function(elem){
				console.log(elem,elem.innerText)
			})
		</script>
	</body>
</html>

二、queryselsctor(选择器)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			
		</style>
	</head>
	<body>
		<h1 id="dom">queryselsctor</h1>
		<div>
			<p>你好1</p>
			<p>你好2</p>
			<p>你好3</p>
			<p class="four">你好4</p>
			<p>你好5</p>
		</div>
		<script>
			// queryselsctor通过css选择器的方式去查询节点
			// query查询 selector选择器
			var p = document.querySelector("div .four");
			console.log(p,p.innerHTML);
			// 选择节点非常方便,填写Css选择器
			var p2 = document.querySelector("div p:last-of-type");
			console.log(p2,p2.innerHTML);
			// querySelectorAll 通过css选择器获取节点列表
			var ps = document.querySelectorAll("div p:not(.four)");
			ps.forEach(function(item){
				console.log(item.innerText);//遍历节点
				// innerText 元素的文本内容
			})
		</script>
		
		
	</body>
</html>

三、更改层内容

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button type="button" onclick="changeIt()">更改层内容</button>
		<div>	
			 我喜欢xxx
		</div>
		<input type="text" value="人生苦短"/> 
		<button type="button" onclick="changeInp()"> 改变文本框的内容</button>
		<script>
			function changeInp(){
				var input = document.querySelector("input");
				// value 获取/设置文本框的值
				input.value = "学前端,月薪过万!";
			}
			
			 function changeIt(){
				 var div = document.querySelector("div");
				 // 修改div的内容文本
				 // innerText 获取/设置元素文本内容(除html标签)
				 // div.innerText = "我还是喜欢<strong>xxx</strong>";
				 // innerHTML 获取/设置元素的html内容
				 div.innerHTML = "我还是喜欢<strong>xxx</strong>";
			 }
		</script>
	</body>
</html>

四、访问页面元素

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" value="春" name="season" />
		<input type="text" value="夏" name="season" />
		<input type="text" value="秋" name="season" />
		<input type="text" value="冬" name="season" /><br/>
		<input type="button"   value="显示input内容" onclick="showInput()" />
		<input type="button"   value="显示season内容" onclick="showSeason()" />
		<div id="tip">
		</div>
		<script type="text/javascript">
			function showSeason(){
				var str = "";//用来存储每个season的值
				// 获取到所有的季节
				var seasons = document.getElementsByName("season");
				// 遍历seasons
				seasons.forEach(function(item){
					// 累计追加每个input的值
					str+=item.value+"<br/>";
				})
				var tip  = document.getElementById("tip");
				// 设置tip的文本
				tip.innerHTML = str;
				
			}
			function showInput(){
				var str = "";//存储每个input里面的值
				// 获取所有input节点
				var inps = document.querySelectorAll("input");
				// 遍历inps 把value追加到 str里面
				inps.forEach(function(item){
					str+=item.value+"<br/>";
				})
				console.log(str);	
				// 获取tip节点
				var tip = document.getElementById("tip");
				// 设置tip的html内容
				tip.innerHTML = str;
			}
		</script>
	</body>
</html>

五、修改style样式(相当于用js来样式)


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#div{
				width: 200px;
				height: 100px;
				border: 2px solid red;
			}
		</style>
	</head>
	<body>
		 <div id="div">
		 	你好样式style
		 </div>
		 <button type="button" onclick="changeW()">变宽</button>
		 <script type="text/javascript">
		 	function changeW(){
				// 获取div
				var div = document.getElementById("div");
				// 相当于用js写了行内样式
				// 修改div样式
				div.style.width = "400px";
				// font-size写法改成驼峰式 fontSize
				div.style.fontSize = "48px";
			}
		 </script>
	</body>
</html>

六、修改元素的显示与隐藏

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#mydiv{
				width: 200px;
				height: 100px;
				border: 2px solid red;
			}
		</style>
	</head>
	<body>
		 <button type="button" onclick="toggle()">切换</button>
		 <div id="mydiv">
		 	学前端月薪过1.5万
		 </div>
		 <script type="text/javascript">
		  // 通过单击按钮实现div的切换与线上
		  function toggle(){
			  // 获取到div
			  var divs = document.getElementById("mydiv");
			  // 获取到display值(第一次默认获取不到)
			  var display = divs.style.display;
			  // 如果不是为none
			  if(display!=="none"){
				  // 隐藏
				  divs.style.display = "none";
			  }else{
				  // 显示
				  divs.style.display = "block";
			  }
		  }
		  
		 </script>
	</body>
</html>

七、通过classlist切换

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#mydiv{
				width: 200px;
				height: 100px;
				border: 2px solid red;
			}
			.hide{
				display: none;
			}
		</style>
	</head>
	<body>
		 <button type="button" onclick="toggle()">切换</button>
		 <div id="mydiv">
		 	学前端月薪过1.5万
		 </div>
		 <script type="text/javascript">
		  // 通过单击按钮实现div的切换与线上
		  function toggle(){
			  // 获取到div
			  var divs = document.getElementById("mydiv");
			  // 如果divs的类列表里面有hide 移除hide没有添加hide
			  // console.log(divs.classList);
			  divs.classList.toggle("hide");
			  // classList.toggle() 切换类名
			  // classList.add()  添加类名
			  // classList.remove() 移除类名
			  // classList.contains() 检查是否包含
		  }
		 </script>
	</body>
</html>

八、style只能访问行内样式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#mydiv{
				 
				height: 100px;
				border: 2px solid red;
			}
			 
		</style>
	</head>
	<body>
		 <button type="button">切换</button>
		 <div id="mydiv" style="width: 200px;">
		 	学前端月薪过1.5万
		 </div>
		 <script type="text/javascript">
			var divs = document.getElementById("mydiv");
			// 如果是行内样式可以访问到
			// 写在style标签里的样式是访问不到的
			alert(divs.style.width);
			alert(divs.style.height);
		  
		 </script>
	</body>
</html>

九、二级下拉菜单(ps:这个有点难)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			* {
				margin: 0;
				padding: 0;
				
			}

			ul,
			li {
				list-style: none;
			}

			.nav {
				height: 90px;
				background-color: #ccc;
			}

			.menu>li {
				display: inline-block;
				height: 90px;
				line-height: 90px;
				width: 160px;
				text-align: center;
				vertical-align: middle;
			}

			.menu>li:hover,.submenu>li:hover{
				background-color: aqua;
			}

			.submenu {
				background-color: #ccc;
				display: none;
			}
			.link{
				position: relative;
			}
			.submenu .submenu{
				position: absolute;
				width: 160px;
				left: 160px;
				top: 0;
			}
		</style>
	</head>
	<body>
		<div class="nav">
			<ul class="menu">
				<li class="link">
					首页
				</li>
				<li class="link">
					<a href="">产品</a>
					<ul class="submenu">
						<li>
							<a href="">二级菜单一</a>
						</li>
						<li class="link">
							<a href="">二级菜单二</a>
							<ul class="submenu">
								<li>
									<a href="">三级菜单一</a>
								</li>
								<li>
									<a href="">三级菜单二</a>
								</li>
								<li>
									<a href="">三级菜单三</a>
								</li>
							</ul>
						</li>
						<li>
							<a href="">二级菜单三</a>
						</li>
					</ul>
				</li>
			</ul>
		</div>
		<script>
			// link被hover时候,选择到link的子节点submenu显示
			var links = document.querySelectorAll(".link");
			// 对link遍历
			links.forEach(function(item) {
				// 选择到link(item)的子节点submen
				var submenu = item.querySelector(".submenu");
				// 当鼠标移入link(item)
				item.onmouseover = function() {
					// 让其子节点submenu显示,解决鼠标放到首页li上会报错用的js上三级运算符
					submenu ? submenu.style.display = "block" : "";
				}
				// 当鼠标移除事件
				item.onmouseout = function() {
					// 让其子节点submenu显示 ,解决鼠标放到首页li上会报错用的js上三级运算符
					submenu ? submenu.style.display = "none" : "";
				}
			})
			// 本次单词:onmouseover(当鼠标移入事件),onmouseout(当鼠标以出事件)
		</script>
	</body>
</html>

十、全选按钮

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			* {
				margin: 0;
				padding: 0;
				
			}

			ul,
			li {
				list-style: none;
			}

			.nav {
				height: 90px;
				background-color: #ccc;
			}

			.menu>li {
				display: inline-block;
				height: 90px;
				line-height: 90px;
				width: 160px;
				text-align: center;
				vertical-align: middle;
			}

			.menu>li:hover,.submenu>li:hover{
				background-color: aqua;
			}

			.submenu {
				background-color: #ccc;
				display: none;
			}
			.link{
				position: relative;
			}
			.submenu .submenu{
				position: absolute;
				width: 160px;
				left: 160px;
				top: 0;
			}
		</style>
	</head>
	<body>
		<h1>全选</h1>
		<input type="checkbox" name="" id="all">全选<br>
		<input type="checkbox" >选项1
		<input type="checkbox" >选项2
		<input type="checkbox" >选项3
		<input type="checkbox" >选项4
		<script>
			// 当全选发生变化的时候,所有checkbox非all值与all的保持一致
			// 获取all
			var all = document.getElementById("all");
			// 获取非all的checks
			var checks = document.querySelectorAll("input:not(#all)");
			all.onchange = function(){
				// 遍历checks,设置元素的值为all的值
				checks.forEach(function(item){
					item.checked = all.checked;
				})
			}
			// checks每个input,当发生变化时候,计算已经选中的个数
			// 如果选中的个数等于checks长度那么就说明要设置全选了
			checks.forEach(function(item){
				item.onchange = function(){
					// 获取已经选中的checkbox
					// input:not(#all):check(css3新增选择器)
					// input选中所有input标签:not(#all)过滤掉id为all表单:checked留下被选中的checkbox
					var sel = document.querySelectorAll("input:not(#all):checked");
				    if(sel.length===checks.length){
						// 如果选中的长度等于checks长度
						all.checked = true;
					} else{
						all.checked = false;
					}
				}
			})
		</script>
	</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值