javascript - 关于getElementByClassName遍历问题

查看:98
本文介绍了javascript - 关于getElementByClassName遍历问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>checkDemo</title>
    <link href="css/font-awesome.min.css" rel="stylesheet">
    <style type="text/css">
        *{margin: 0;padding: 0}
        body{font-size: 26px;}
        .f-left{float: left}
        .f-right{float: right}
        ul{list-style: none;margin-top: 50px;}
        ul li{height: 30px;padding: 5px 20px}
    </style>
</head>
<body>
    <ul>
        <li>
            <span class="f-left">test</span>
            <span class="f-right"><i class="icon-ok-circle"></i></span>
        </li>
        <li>
            <span class="f-left">test</span>
            <span class="f-right"><i class="icon-ok-circle"></i></span>
        </li>
        <li>
            <span class="f-left">test</span>
            <span class="f-right"><i class="icon-ok-circle"></i></span>
        </li>
        <li>
            <span class="f-left">test</span>
            <span class="f-right"><i class="icon-ok-circle"></i></span>
        </li>
        <li>
            <span class="f-left">test</span>
            <span class="f-right"><i class="icon-ok-circle"></i></span>
        </li>
    </ul>
    <script type="text/javascript">
        var getDom=document.getElementsByClassName("icon-ok-circle")
        console.log(getDom)
        for(var i=0;i<getDom.length;i++){
            console.log(i)
            getDom[i].className="icon-ok-sign"
            //getDom[i].setAttribute("class","icon-ok-sign")
        }
    </script>
</body>
</html>

加上getDom[i].className="icon-ok-sign"这行console.log(i)输出的是0-2三个数不加getDom[i].className="icon-ok-sign"这行console.log(i)输出的是0-4五个数,把getElementsByClassName换成getElementsByTagName又一切正常!这是什么情况?

解决方案

getElementsByTagName和getElementsByClassName其实一样都是动态的,而由于你是改变了ClassName才会导致你遇到的问题;
简单的说一点就是

getDom一开始是5个,改变了第一个之后,class为icon-ok-circle就只有4个了,然后原本getDom[1]就成为后一步操作中的getDom[0],但此时for循环的i值已经变为1,所以他改变的是之前2位置的,所以会出现隔一个改变的情况

这篇关于javascript - 关于getElementByClassName遍历问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆