JavaScrip中如何操控Html中的元素

目录

         前言

                 使用JS制作图片自动切换效果

                 在JS中获取HTML元素

        HTML元素上的常用事件 

        HTML元素上的常用属性

        控制HTML元素的显示和隐藏

        实现左侧菜单功能和全选多选框功能

小结


前言

如果你看过小阿飞的上一篇文章,那么下面这些专业词汇的英文你一定会知道,考考你们,它们用英文怎么写呢?_?

     函数                窗口对象                 数学对象                 日期对象                    

     定时器            循环定时器              点击事件                  随机数 

-----------------------------想一想&_&------------------------------------------------------------------------------------------------------------------------------------写一写*_*-------------------------------------------------------------------------------------------------------------------------------------再看答案0_0---------------------------------------------

---------------------------------------- 不要偷看!_!-----------------------------------------------------------------------

* 函数 function(){}        * 窗口对象 window        * 数学对象 Math        * 日期对象 Date
*定时器 setTimeout   *循环定时器 setInterval    *点击事件 onclick      *随机数 Math.random()

步入正题:我们知道html是一门标签话的语言,那么,我们可以在JS中操作html中的元素吗?(这里的元素指的就是html中的标签),答案是可以,具体如何操作,待小阿飞在下面逐步讲解:


正文内容:

 使用JS制作图片自动切换效果

 首先你需要在images文件夹中任意保存三张图片,为了方便自动切换,最好将后缀名改为下图这样

 然后用html语言和JS中操作html元素方法将这三张图片自动循环显示(详见下代码)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>使用JS制作图片自动切换效果</title>
		<!-- 图片切换 style样式标签 -->
		<style>
			/* 标签选择器 */
			div{
				 width: 400px;
				 height: 300px;
			     /* 从center中间开始平铺,cover铺满整个块状div */
				 background: url("images/a0.jpg") center/cover;
			}
		</style>
	</head>
	<body>
        <!--写一个块状标签div放图片-->
		<div id='d1'></div>
        <!--script标签中操作html元素-->      
      <script>
			var b=1;//初始图片就是a0.jpg,所以下标从1开始
			// setInterval(正常函数:function a1(){ })
			// 简写(箭头函数就是正常函数的简写)
			setInterval(()=>{
				 // 操作元素"html"的css
                 //方法:用div的编号点出它的style样式中的需要操作修改的属性
				 d1.style.backgroundImage="url('images/a"+(b%3)+".jpg')"//显示a1
				 b++;//显示a2....
				 // (b%3):3%3=0,4%3=1,5%3=2,6%3=0....一直在0,1,2中间循环
			},1000)
      </script>
	</body>
</html>

 还可以用以上方法让用户点更换图片(详见下代码)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>点击按钮更换图片</title>
	</head>
	<body>
		<script>
		<img id='m1' src="images/a0.jpg" width="400px" height="300px"/>
        <button onclick="fn1()">更改图片</button>
	        var m=1;
			function fn1(){
				// 要想在函数中操作一个html元素(标签),就要用到它的id
				m1.src='images/a'+(m%3)+'.jpg'
				m++;//2%3=2
			}
		</script>
	</body>
</html>

 在JS中获取HTML元素

1,直接使用id点出来,例如:d1.style.background='blue' 前面讲了

2,JS中获取HTML元素的方法: document.getElementById()根据标签中的id得到元素Element

方法1和2的代码如下

d1是一个div标签上的id编号, 虽然方法2看起来比方法1还多了一行代码,但是方法1在有些版本较低的html中是无法使用的

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>更改一个div方块的颜色</title>
		<style>
			div{
				 width: 400px;
				 height: 300px;
				 background: red; 
			}
		</style>
	</head>
	<body>
		<div id="d1"></div>
		<br>
		<button onclick="fn1()">点我改一个方块颜色(ById)</button>
		<script>
			function fn1(){
				//方法1: 通过元素的id来更改元素中style样式对应的属性
				//d1.style.background='blue'
                //方法2:
                var d=document.getElementById("d1")
				d.style.background='blue' 
			}
		</script>
	</body>
</html>

上面的代码只更改了一个div标签的颜色,那如果要你更改20个,30个甚至100个div标签的颜色,你还会根据id来更改吗?

        <div id="1"></div>
		<div id="d2"></div>
		<div id="d3"></div>
		<div id="d4"></div>
        <div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
        <div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<!-- ....... -->
		<div id="dn"></div>

可见,这样取id十分麻烦,这里就要像大家介绍在JS中获取HTML元素的另外几个方法了

JS中获取HTML元素的方法:

3,document.getElementsByTagName() : 通过标签名

4,document.getElementsByClassName() : 通过标签中的class属性

同4 ,document.getElementsByName() :通过标签中的name属性

3,4是获得HTML元素集合:getElements

集合的长度会随着页面元素的增删而变化 

 代码如下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>更改多个div方块的颜色</title>
		<!--  -->
		<style>
			div{
				 width: 400px;
				 height: 300px;
				 background: red; 
				 /* 修改元素的盒类型(行内,块状,行内块状) */
				 display: inline-block;
			}
		</style>
	</head>
	<body>
		<div id="d1"></div>
		<div id="d2"></div>
		<div id="d3"></div>
		<div ></div>
		<div ></div>
		<div ></div>
		<div class="a"></div>
		<div class="a"></div>
		<br>
		<button onclick="fn2()">点我改所有的方格颜色(ByTagName)</button>
		<button onclick="fn3()">点我改部分的方格颜色(ByClassName/byName)</button>
		<script>
	// 用标签名更改所有元素的颜色(只要拿到所需要更改的元素的名称即可,不需要拿到id)
   // TagName:元素名称,getElementsByTagName("标签名")根据元素名称得到所有的元素Elements
			function fn2(){
				 var ds=document.getElementsByTagName('div')
				 //ds.style.background='blue';这样写会报错:
                 //打印console.log(ds)发现ds是一个放标签的数组(见下一张图)
				// 于是:我们可以:便利数组中的元素(标签)
				//遍历数组
				        /**
						 //方法1:for循环
				        for(var i=0;i<ds.length;i++){
							//ds[i]是元素数组ds[]中的标签,标签中有style属性,所以可以点出 
				            ds[i].style.background="pink"
				        }
				         **/	
				        //方法2:foreach(更简单)
				        for(var i of ds){
				            //i就是ds数组中的每一个元素
				            i.style.background="Purple"
				        }
			}
			// 使用class选择器更改部分元素的颜色
			function fn3(){
				 // 在JS中Class就叫做ClassName
				 var ds=document.getElementsByClassName('a')
				 // Elements有s,可以遍历
				 for(var i of ds){
					  i.style.background="yellow"
				 }
			}
			// 上面函数的写法都像我们展示了如何在函数中操作html中的元素(标签)
		</script>
	</body>
</html>

不在这几个方法中使用ds.style.background='blue' ,是因为在使用它是报了Cannot set properties of undefined(setting 'background')错误,即不能设置未定义属性(设置背景属性时报错),这种报错可能是background前的ds.style未定义,可以打印验证console.log(ds.style)
,再打印console.log(ds)可以发现ds是一个放html元素的数组,而style样式是标签中的属性,ds数组中没有,所以ds数组点不出来style,打印结果见下图

HTML元素上的常用事件 

  onclick : 点击事件                               ondblclick : 双击事件
  onfocus : 获得焦点事件                      onblur : 失去焦点事件
  onmouseover : 鼠标移入                    onmouseout : 鼠标移出

 让我们简单的调用一下这些方法吧

<body>
		<input type="text" onclick="fn1()" ondblclick="fn2()"/>
		<input type="text" onfocus="fn3()" onblur="fn4()"/>
		<input type="text" onmouseover="fn5()" onmouseout="fn6()"/>
		<script >
			function fn1(){
				console.log('单击')//控制台打印
			}
			function fn2(){
				console.log('双击')
			}
			function fn3(){
				console.log('获得焦点')
			}
			function fn4(){
				console.log('失去焦点')
			}
			function fn5(){
				console.log('鼠标移入')
			}
			function fn6(){
				console.log('鼠标移出')
			}
		</script>
	</body>

 运行结果要在控制台查看哦(小阿飞前面的文章教过怎么打开控制台哦*—*) 

HTML元素上的常用属性

* textContent : 标签的文本内容(定义的标签不生效)
* InnerHTML : 标签中的html内容和文本内容(标签会生效)
* value : 元素的值(适用具备value属性的元素,比如输入框中就有value属性而div标签中就没有要拿div的内容可以用textContent,或者InnerHTML(使用方法在上一篇文章))
* checked :是否被选中(单选框,多选框)
* style : 标签中的style属性(用于设置样式,比如上面的代码(修改div的颜色))

 请听题: 有10个输入框,运用上面的的知识,实现:
             1. 不同按钮点击的时候为当前界面中的input赋上不同的值
             2. 当input获得焦点时清空他的值,失去焦点的时候判断是否为数字        解法如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>HTML元素上的常用属性</title>
	</head>
	<body>
			<!-- input*10再按下Tab键即可生成10个输入框 -->
			<input type="text">
			<input type="text">
			<input type="text">
			<input type="text">
			<input type="text">
			<input type="text">
			<input type="text">
			<input type="text">
			<input type="text">
			<input type="text">			
			<button onclick='fn1("嘻嘻")'>嘻嘻</button>
			<button onclick='fn1("哈哈")'>>哈哈</button>
		<script>
		// 1. 不同按钮点击的时候为当前界面中的input赋上不同的值
			function fn1(a){
				/*1,拿到所有输入框
				这里就可以使用我之前讲的四种在函数中操作html元素的方法
				document.getElementById() : 通过标签中的id属性
				下面三种方法可以获得HTML元素集合:
				集合的长度会随着页面元素的增删而变化
				document.getElementsByTagName() : 通过标签名
				document.getElementsByClassName() : 通过标签中的class属性
				document.getElementsByName() :通过标签中的name属性
                JS中class就相当于className
				*/
			    var ds=document.getElementsByTagName('input')
				//2,更改输入框的值value
				for(var i of ds){// i就是ds[i]
					i.value=a//a就是传入的参数:嘻嘻
				}
			}
			//2. 当input获得焦点时清空他的值,失去焦点的时候判断是否为数字
				// b.给所有的输入框赋值(失去焦点事件,获得焦点事件)
				(()=>{//匿名函数
					// a,找到页面中所有的输入框
					var ds=document.getElementsByTagName('input')//ds是放所有输入框的集合
					// 遍历ds
					for(var i of ds){
						i.onfocus=()=>{//操作元素i(输入框)中获得焦点时的情况
							i.value='获得焦点了'//情况
						}
						i.onblur=()=>{
							i.value='失去焦点了'//情况
						}
					}
				})();		
		</script>
	</body>
</html>

但是像上面这样写就会只清空最后一个输入框并且赋值,效果如下图

这是因为,在便利标签数组时使用foreach循环遍历ds时用了var声明,想要改善,用let替代var就可以解决上图的问题了^_^(let的意思是定义局部变量)  

            (()=>{
                    //1,拿到所有input输入框的数组
				    var ds=document.getElementsByTagName('input')
                    //2,使用let遍历数组
					for(let i of ds){
						i.onfocus=()=>{//操作元素i(输入框)中获得焦点时的情况
							i.value='获得焦点了'//情况
						}
						i.onblur=()=>{
							i.value='失去焦点了'//情况
						}
					}					
				})();	

控制HTML元素的显示和隐藏

1,display中的属性         none : 不显示(页面不会有空间)->隐藏
                                      block : 以块状元素显示
                                      inline : 以行内元素显示
2, visible :可见,hidden : 不可见(会占据页面空间)
3, opacity透明度:用于控制元素的透明度 0~1之间的值,0:完全透明,1:完全不透明

学以致用:控制div方块的显示和隐藏

通过分析,可以知道方块就是div元素,所以我们可以使用今天学到的在函数中控制html元素的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>控制元素的显示和隐藏</title>
		<style>
			div{
				 width: 400px;
				 height: 300px;
				 background: red; 
				}
		</style>
	</head>
	<body>
		<div id="d1"></div>
		<button onclick="fn1()">点我隐藏方块</button>
		<button onclick="fn2()">点我更改透明度</button>
		<script>
			function fn1(){
				// =赋值,==比较内容,===严格比较
				//单词比较最好用===严格比较
				if(d1.style.display=='none'){//如果元素是隐藏
					// d1.style.display='block';//就显示,块状标签
					d1.style.display='visible';
				}else{
					// d1.style.display='none';
					d1.style.display='hidden';
				}
			}
			function fn2(){
					// 数字比较就只用==比较内容就可以了
					if(d1.style.opacity==0.5){//当div方块半透明时
						d1.style.opacity=1// 改为完全不透明
					}else{
						d1.style.opacity=0.5
					}
				}
		</script>
	</body>
</html>

 实现左侧菜单功能和全选多选框功能

都看到这里了,相信这两个功能你一定能写出来(相关代码和运行结果如下)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>实现左侧菜单功能</title>
	</head>
	<body>
		<ul>
			<!-- 点击家电时将家电下面的内容隐藏 -->
			<!-- 将家电随便套一个标签用来调用函数 -->
			<!-- 因为li标签将ul,li标签都括起来了,<li>中调用onclick="fn1('u1')时li括起来的标签也被设置调用了 -->
		    <li><i onclick="fn1('u1')">家电</i>
		        <ul id="u1">
					<!-- 下面三个li元素都用id来代表了 -->
		            <li>冰箱</li>
		            <li>洗衣机</li>
		            <li>电视</li>
		        </ul>
		    </li>
		    <li><span onclick="fn2('u2')">水果</span>
		        <ul id="u2">
		            <li>苹果</li>
		            <li>西瓜</li>
		            <li>葡萄</li>
		        </ul>
		    </li>
		</ul>
		<script>
		//根据id拿出对应的元素
		        //将对应元素设置为不显示
			function fn1(id){
				//根据id拿出对应的元素
				// getElementById()也比较常用
				var li=document.getElementById(id)//这个id就是传入的参数
				if(li.style.display=='none'){//如果元素是隐藏
					li.style.display='block';//就显示,块状标签
				}else{
					li.style.display='none';
				}
			}
			function fn2(id){
				var li=document.getElementById(id)//这个id就是传入的参数
				if(li.style.display=='none'){//如果元素是隐藏
					li.style.display='block';//就显示,块状标签
				}else{
					li.style.display='none';
				}
			}
		</script>
	</body>
</html>

 

点击家电或者水果就可以隐藏家电下面的菜单了

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>全选多选框功能</title>
		<!-- 点击一个框就选中所有框 -->
	</head>
	<body>
		<table>
		   <tr>
						<!-- this.checked将这个多选框被选中的状态作为参数传给函数 -->
					  <td><input type="checkbox" onclick="fn4(this.checked)"></td>
		   </tr>
		   <tr>
		   			   <td><input type="checkbox" onclick="fn4(this.checked)"></td>
		   </tr>
		   <tr>
		   			   <td><input type="checkbox" onclick="fn4(this.checked)"></td>
		   </tr>
		   <tr>
		   			   <td><input type="checkbox" onclick="fn4(this.checked)"></td>
		   </tr>
		   <tr>
		   			   <td><input type="checkbox" onclick="fn4(this.checked)"></td>
		   </tr>
		   <tr>
		   			   <td><input type="checkbox" onclick="fn4(this.checked)"></td>
		   </tr>
		</table>
		<script>
			function fn4(status){//status状态
				 //拿到所有的多选框
				 var ds=document.getElementsByTagName('input')
				//设置选中为第一个多选框的状态
				for(let i of ds){
					i.checked=status
				}
			}
		</script>
	</body>
</html>

 

 任意点击一个框,就可以选中所有的框

小结

 今天的JS内容就讲到这里了,对JS感兴趣的朋友可以关注我,后续将继续发布相关文章带大家进一步了解学习JS

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值