请老师逐步解析一下这段代码,谢谢
请老师逐步解析一下这段代码,谢谢
<script>
var tabs = document.getElementsByClassName("tabs") //tabr容器
var lis = document.getElementsByClassName("aa") //获取tab切换a标签
//tab切换
window.onload = function () {
for (var i = 0; i < lis.length; i++) {
lis[i].index = i;//尤其是这句的意思和用处
lis[i].onclick = function () {
for (var j = 0; j < lis.length; j++) {
lis[j].className = "";
}
this.className = "active";
for (var k = 0; k < tabs.length; k++) {
tabs[k].style.display = "none";
}
tabs[this.index].style.display = "block";//这个for循环请多详细解释
}
}
}
</script>
正在回答
同学你好,老师加上html结构测试代码的时候发现了一个问题,获取lis是通过class值aa
而在遍历的时候直接清空了lis的类,aa也没有了,这时候获取lis长度会有问题
建议修改为这样,保留aa
另外如果想使用setAttribute和getAttribute可以这样写:
自己测试下,祝学习愉快!
同学你好,问题解答如下:
1、lis[i].index=i;这行代码是给lis每一个元素添加index属性,值为i,也就是第一个lis元素,有index属性值为0;第二个lis元素,有index属性值为1,后面以此类推。是为了能够保存每个lis元素的索引。
2、this.index是当前lis元素的索引,也就是前面index属性设置的;而lis和tabs元素数量一样,所以从当前的lis中获取索引,然后再通过索引从tabs中找到对应元素,设置显示样式。
3、代码注释如下:
<script>
var tabs = document.getElementsByClassName("tabs"); //tabr容器
var lis = document.getElementsByClassName("aa"); //获取tab切换a标签
//tab切换
window.onload = function() {
// 遍历lis元素
for (var i = 0; i < lis.length; i++) {
//给lis元素设置index,值为i值,相当于保存了索引,从0开始
lis[i].index = i;
// 给lis元素绑定点击事件
lis[i].onclick = function() {
// 遍历lis元素
for (var j = 0; j < lis.length; j++) {
// 清除所有lis元素的class类
lis[j].className = "";
}
// 给当前lis元素添加class类,也就是激活样式
this.className = "active";
// 遍历所有tabs元素
for (var k = 0; k < tabs.length; k++) {
// 给所有tabs设置隐藏
tabs[k].style.display = "none";
}
// 获取当前lis元素的index索引,作为tabs元素的索引,找到对应的tabs元素,设置显示
// 因为lis和tabs元素数量一样,所以从当前的lis中获取索引,然后再通过索引从tabs中找到对应元素
tabs[this.index].style.display = "block";
};
}
};
</script>
总结:点击一个lis元素的时候,清除所有lis元素的class类,给当前点击的lis元素添加class类;给所有的tabs设置隐藏,给当前lis对应的tabs元素设置显示。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星