达拉~ 2022-04-13 13:05 采纳率: 64.7%
浏览 36
已结题

js实现选项卡的一些问题

这里是选项卡的html和js代码,但是js代码中有一些代码看不太懂


```html
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            list-style: none;

        }

        .items {
            float: left;
            width: 100px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            background-color: rgb(206, 106, 106);
        }

        .concents {
            width: 400px;
            height: 300px;
            border: 1px solid #000;
            text-align: center;
            box-sizing: border-box;
            line-height: 300px;

        }

        #concent {
            width: 400px;
            height: 300px;
            overflow: hidden;
            clear: both;

        }
    </style>
</head>

<body>
    <ul id="item">
        <li class="items" style="background-color: red;">第一个</li>
        <li class="items">第二个</li>
        <li class="items">第三个</li>
        <li class="items">第四个</li>
    </ul>
    <div id="concent">
        <div class="concents" style="display: block;">第一个</div>
        <div class="concents">第二个</div>
        <div class="concents">第三个</div>
        <div class="concents">第四个</div>
    </div>

我不太理解的是    items[i].index = i    这段代码起的是什么作用,还有在后面会用它来实现内容区的一个显示的
代码 concents[this.index].style.display = 'block'   不理解他们是怎么运行的

```javascript
    <script>
        var items = document.querySelector('#item').getElementsByClassName('items')
        var concents = document.querySelector('#concent').getElementsByClassName('concents')
        console.log(concents[2])
        for (i = 0; i <items.length; i++) {
            items[i].index = i
            items[i].onclick = function () {
                for (var j = 0; j < items.length; j++) {
                    items[j].style.backgroundColor = 'rgb(206, 106, 106)'
                    concents[j].style.display = 'none'
                }
                this.style.backgroundColor = 'red'
                concents[this.index].style.display = 'block'

            }
        }
    </script>
</body>

  • 写回答

2条回答 默认 最新

  • 全干攻成狮 2022-04-13 14:53
    关注

    这个demo里面,直接采用i题主应该就很好理解了,如下代码,但是直接用i有问题,因为点击触发事件的时候,本次循环已经执行完毕,i值已经为items.length,此时通过concents[i],是读取不到对应元素的,点击第一个期望是concents[0],但此时是concents[4]。
    他这里只不过是给每个item加了一个index属性,固定当前的i值,方便后面concents[this.index]找到对应的item。

    for (i = 0; i < items.length; i++) {
          // items[i].index = i;
          items[i].onclick = function() {
            for (var j = 0; j < items.length; j++) {
              items[j].style.backgroundColor = "rgb(206, 106, 106)";
              concents[j].style.display = "none";
            }
            this.style.backgroundColor = "red";
            // concents[this.index].style.display = "block";
            concents[i].style.display = "block";
          };
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月13日
  • 已采纳回答 4月13日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)