OscarK
2016-11-16 18:47
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>实践题 - 选项卡</title>
<style type="text/css">
/* CSS样式制作 */
body {
margin: 0;
padding: 100px;
}
.clearfix:before,
.clearfix:after {
content: "";
display: block;
height: 0;
visibility: hidden;
clear: both;
}
ul {
list-style:none;
padding: 0;
margin: 0;
}
li {
float: left;
padding: 5px 10px;
margin-right: 5px;
border: solid 1px #DDD;
border-bottom: none;
cursor: pointer;
}
.tab-on {
border-top: 2px solid purple;
border-bottom: 2px solid white;
}
.tab-content {
width: 280px;
border: 1px solid black;
border-top: 2px purple solid;
padding: 10px 10px 20px;
height: 100px;
margin-top: -2px;
}
.hide{
display: none;
}
</style>
<script type="text/javascript">
// JS实现选项卡切换
window.onload = function () {
tab();
}
function tab() {
var li = document.getElementsByTagName("li");
var tabContent = document.getElementsByClassName("tab-content")[0];
var div = tabContent.getElementsByTagName("div");
for ( var i = 0; i < li.length; i ++) {
li[i].index = i;
li[i].onclick = function () {
//this.index = i; //什么时候用this ??????????,这里跟上面的声明有什么不一样
for(var j = 0; j < li.length; j ++) {
li[j].className = "";
div[j].className = "hide";
}
this.className = "tab-on"; //这里用了this,指li[i] 对吧
div[this.index].className = "";
}
}
}
</script>
</head>
<body>
<!-- HTML页面布局 -->
<ul>
<li>房产</li>
<li>家居</li>
<li>二手房</li>
</ul>
<section>
<div>
<p>
275万购昌平邻铁三居 总价20万买一居<br>
200万内购五环三居 140万安家东三环<br>
北京首现零首付楼盘 53万购东5环50平<br>
京楼盘直降5000 中信府 公园楼王现房
</p>
</div>
<div>
<p>
40平出租屋大改造 美少女的混搭小窝<br>
经典清新简欧爱家 90平老房焕发新生<br>
新中式的酷色温情 66平撞色活泼家居<br>
瓷砖就像选好老婆 卫生间烟道的设计
</p>
</div>
<div>
<p>
通州豪华3居260万 二环稀缺2居250w甩<br>
西3环通透2居290万 130万2居限量抢购<br>
黄城根小学学区仅260万 121平70万抛<br>
独家别墅280万 苏州桥2居优惠价248万
</p>
</div>
</section>
</body>
</html>
为什么要在for循环给每个li绑定点击事件时使用this,这里首先涉及到js代码块的加载顺序问题.
js加载的时候,首先找到全局中的变量以及定义的函数名并分配内存,然后第二遍再去分别找变量和函数名中的内容进行赋值,加载顺序我也不太清楚,同学可以取百度下js加载的执行顺序进行了解
关键在for循环中绑定点击事件时候,li[i].onclick在js第一次加载的时候并不会去看绑定的匿名函数中的内容,而只是知道这个li有个绑定事件方法,等到有调用的时候它才去看的.如果用i来表示的话,并不会像我们想的那样有一一对应的值的.所以这个一一对应的值我们就用li[i].index = i来表示,每个li就有特定的index索引值了.并且绑定事件里面的函数也无法再li[i]表示当前的这个li了.
然后这个时候this就派上用场啦,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,this指的是,调用函数的那个对象,详细有关this的说明同学业可以度娘,我也是度娘跟你说的可以看这个,http://www.jb51.net/article/41656.htm
解答就到这里,主要就是明白js加载执行的时候是怎么执行的.在某些情况执行的时候无法很好的表示当前的对象,用this表示,比如在<a onclick="ha(this)"></a>还有就是上面for循环中每个点击事件
JavaScript进阶篇
469418 学习 · 22585 问题
相似问题
回答 3
回答 3