准备一个页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Tab栏菜单</title>
<style>
body,ul{
margin: 0;
padding: 0;
list-style: none;
}
ul{
width: 550px;
margin: 40px auto;
}
li{
float: left;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
background-color: antiquewhite;
margin:0 5px;
}
a{
color: blue;
text-decoration: none;
}
.act{
background-color: blue;
}
.act a{
color: #fff;
}
.cl:after{
content: "";
display: block;
clear: both;
}
</style>
</head>
<body>
<div class="box">
<ul class="cl">
<li class="act"><a href="javascript:void(0)">菜单1</a></li>
<li><a href="javascript:void(0)">菜单2</a></li>
<li><a href="javascript:void(0)">菜单3</a></li>
<li><a href="javascript:void(0)">菜单4</a></li>
<li><a href="javascript:void(0)">菜单5</a></li>
</ul>
</div>
</body>
</html>
效果图如下
为什么要在a标签的href中写入JavaScript:void(0)?
a标签的默认行为就是将浏览器的地址栏的内容变成href中的内容。
javascript:
代表一个伪协议。void
是JavaScript的运算符, 对给定的表达式进行求值,然后返回undefined
。 一般使用void(0)(等同于void 0)
。
-
注意
- 虽然这么做是可行的,但利用 javascript: 伪协议来执行 JavaScript 代码是不推荐的,推荐的做法是为链接元素绑定事件,并且清除他的默认行为.
javascript代码
var box = document.getElementsByClassName("box")[0];
var ul = box.children[0];
var lis = ul.children;
for (var i = 0; i < lis.length; i++) {
// 获取到a标签
var link = lis[i].children[0];
// 绑定事件
link.onclick = addClass;
}
// 在循环绑定过程中推荐把匿名函数声明到外面,避免内存浪费
function addClass() {
// 清除其他上面的类名
for (var i = 0; i < lis.length; i++) {
lis[i].className = '';
}
// 当前的this为每一个a标签
// 为自己的父级添加类名
this.parentNode.className = 'act';
return false;
}
-
注意
-
- 在循环绑定过程中,推荐把匿名函数写到外面,这样可以节省内存。
-
- 最后的
return: false
是清除a标签的默认行为
- 最后的