示例,4个div,单选变色效果,
方法1:在元素标签中添加事件名用来触发函数,优点是有明确的函数名,可以重复调用在不同的位置,也可以用不同的事件触发,缺点是每一个元素都需要添加事件,比较繁琐,
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style type="text/css"> .a{ width:20px; height:20px; background-color:red; float:left; margin:5px; } </style> </head> <body> <div class="a" onClick="show(this)"></div> <!--参数为this,代表传回的参数是元素本身--> <div class="a" onClick="show(this)"></div> <div class="a" onClick="show(this)"></div> <div class="a" onClick="show(this)"></div> </body> </html> <script type="text/javascript"> function show(a)//设置形参接收实参 { var b =document.getElementsByClassName("a");//获取元素,得到元素数组 for(var i=0;i<b.length;i++) { b[i].style.backgroundColor = "red";//for循环遍历所有元素并改变颜色为初始颜色 } a.style.backgroundColor = "green";//改变当前选中的元素的颜色 } </script>
方法2:直接定义匿名函数,优点是不用再往标签内添加点击事件,省掉了繁琐的步骤,而且函数时绑定在事件上的,不用担心出现写错函数名而无法调用的情况,缺点是只能绑定在一种事件、一个元素或一组元素集中,不方便重复调用,
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style type="text/css"> .a{ width:20px; height:20px; background-color:red; float:left; margin:5px; } </style> </head> <body> <div class="a"></div> <div class="a"></div> <div class="a"></div> <div class="a"></div> </body> </html> <script type="text/javascript"> var b = document.getElementsByClassName("a");//获取元素,得到的也是元素数组 for(var i=0;i<b.length;i++)//这个循环的作用是给每一个元素加上onclick事件 { b[i].onclick = function()//循环遍历加事件 { for(var i=0;i<b.length;i++)//这个循环用来让所有元素恢复初始色 { b[i].style.backgroundColor = "red";//循环遍历恢复初始色 } this.style.backgroundColor = "green";//this代表元素本身,点击谁谁就是this } } </script>
两种方法的效果一样