请老师逐步解析一下这段代码,谢谢

请老师逐步解析一下这段代码,谢谢

请老师逐步解析一下这段代码,谢谢

<script>

        var tabs = document.getElementsByClassName("tabs"//tabr容器

        var lis = document.getElementsByClassName("aa"//获取tab切换a标签

         

        //tab切换

        window.onload = function () {

            for (var i = 0i < lis.lengthi++) {

                lis[i].index = i;//尤其是这句的意思和用处

                lis[i].onclick = function () {

                    for (var j = 0j < lis.lengthj++) {

                        lis[j].className = "";

                    }

                    this.className = "active";

                    for (var k = 0k < tabs.lengthk++) {

                        tabs[k].style.display = "none";

                    }

                    tabs[this.index].style.display = "block";//这个for循环请多详细解释

                }

            }

        }

    </script>

​    


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,老师加上html结构测试代码的时候发现了一个问题,获取lis是通过class值aa

http://img1.sycdn.imooc.com//climg/60ee8eaa0901024308320049.jpg

而在遍历的时候直接清空了lis的类,aa也没有了,这时候获取lis长度会有问题

http://img1.sycdn.imooc.com//climg/60ee8ec609bc539a04230083.jpg

建议修改为这样,保留aa

http://img1.sycdn.imooc.com//climg/60ee8eea09aed26604940229.jpg

另外如果想使用setAttribute和getAttribute可以这样写:

http://img1.sycdn.imooc.com//climg/60ee8f470931df9704050045.jpg

http://img1.sycdn.imooc.com//climg/60ee8f5509404cad06520079.jpg

自己测试下,祝学习愉快!

好帮手慕星星 2021-07-14 12:07:20

同学你好,问题解答如下:

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

    老师可以帮我把

    lis[i].index = i;
    tabs[this.index].style.display = "block";

    这两句用createAttribute和getAttribute方法改写一下吗

    2021-07-14 12:19:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师