以下代码实现选项卡的功能,其中a [ i ].index=i;和p[this.index]不明白??

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
    <style>
        a{
            text-decoration: none;
            display: inline-block;
            background: #000;
            color: #fff;
            text-align: center;
            width: 100px;
            height:40px;
            line-height: 40px;
            font-size: 25px;
        }
        p{
            border:4px solid #000;
            display: none;
            height: 300px;
        }
    </style>
</head>
<body>
<a style="background: red;" href="#">第一个</a>
<a href="#">第二个</a>
<a href="#">第三个</a>
<p style="display: block">第一个的内容</p>
<p>第二个的内容</p>
<p>第三个的内容</p>
<script>
    var a = document.querySelectorAll('a');
    var p = document.querySelectorAll('p');
    for(var i=0;i<a.length;i++){
        a[i].index = i;
        a[i].onclick = function () {
            for(var j=0;j<a.length;j++){
                a[j].style.background = '#000';
                p[j].style.display = 'none';
            }
            this.style.background = 'red';
            p[this.index].style.display = 'block';
        }
    }


</script>
</body>
</html>

其中js代码中 a[i].index = i;p[this.index].style.display = 'block';不明白??
为什么不能直接使用p[i].style.display?
这行a[i].index = i;代码什么意思

阅读 2.3k
3 个回答

因为click执行的函数是相当于是异步执行,而i始终保持的是全局引用,当你触发click事件时,i实际上已经为a.length了.所以你需要用a[i].index = i来保存每个dom节点的索引值。当然你也可以用闭包来实现,代码如下:

    var a = document.querySelectorAll('a');
    var p = document.querySelectorAll('p');
    for(var i=0;i<a.length;i++){
         (function(i) {
             a[i].onclick = function () {
                for(var j=0;j<a.length;j++){
                    a[j].style.background = '#000';
                    p[j].style.display = 'none';
                }
                this.style.background = 'red';
                p[i].style.display = 'block';
            }
         
         })(i)
        
    }

执行完之后,你的i一直为a.length的值

这个是对多个a标签赋予动作,因为前面查询到的a标签有多个,所以a[i]就是依次取不同的a标签元素进行处理。
p标签的也是类似的。
这个应该是一个切换选项卡效果,它先把所有的p标签都隐藏,然后选择一个取消隐藏来显示。p[this.index]这里因为是指一个a的触发函数中,所以会取到对应a的index值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题