小案例Cannot set property 'className' of undefined到底是怎么出现的?

设计思路:通过修改元素的class值实现改变CSS样式的目的。初始目标是想将所有"div1"更换为"div2",但是实现鲜果却是隔行变色……
案例代码:

<!DOCTYPE html>
<html>

<head lang="zh-CN">
    <meta charset="UTF-8">
    <title>setInterval()</title>
    <style type="text/css">
        .div1 {
            width: 200px;
            height: 100px;
            background-color: gray;
        }

        .div2 {
            width: 200px;
            height: 100px;
            background-color: green;
        }
    </style>
</head>

<body>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <div class="div1">重生之魔教教主</div>
    <script type="text/javascript">
        //补充代码
        window.onload = function () {
            var aDiv = document.getElementsByClassName("div1");
            var len= aDiv.length;
            for (var i = 0; i < len; i++) {
                aDiv[i].className = "div2";
                console.log(len);
            }
        }

    </script>
</body>

</html>

====
图片描述

阅读 3.8k
1 个回答

你这样的定义的 var aDiv = document.getElementsByClassName("div1");
并不是你定义之后不变的,当你操作aDiv[i].className = "div2";之后
aDiv的length就会减去1,因为第一个div1已经变成div2了,第二个div1就变成了第一个div1,但是你遍历的i已经遍历过第一个了,所以跳过了第一个div1(就是之前的第二个div1)
不知道你现在理解了吗?

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