zoukankan      html  css  js  c++  java
  • 浅谈for/in与 HTMLCollection

    1 理解for/in

    for/in只遍历对象的可枚举属性。

    同时,数组也是对象,所以for/in可以用来遍历数组。

    只是当我们定义的是一个普通数组,即key为数字,此时数组的属性就是数字,因此for/in返回的属性值也就是数字。

    想要获得数组中每个元素的值,还需要通过array[key]获得,下面将介绍一种直接获得的方法。

    举个例子

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>array-for-in</title>
    </head>
    <body>
        <script type="text/javascript">
    
        var array = ["tom",'jerry','coco'];
    
        for( element in array){
            alert(element); //返回 0,1,2
        }
    
        </script>
    </body>
    </html>

    2 理解HTMLCellection

    HTMLCollection是HTML元素的集合,虽然它也是对象(typeof可以测试),但是集合是没有key-value对的,所以不能使用for/in遍历HTMLCollec。

    NodeList同理。

    如果强行使用for/in,会返回HTMLCollection长度两倍的undefined(为什么是两倍笔者现在也不知道,有知道的麻烦告知)

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>HTMLColletion</title>
    </head>
    <body>
    
        <div>test div1</div>
        <div>test div2</div>
        <div>test div3</div>
    
    
        <script type="text/javascript">
    
            var divs = document.getElementsByTagName("div");
    
            for(div in divs){
                alert(div.innerHTML);
            }
    
    
        </script>
    
    </body>
    </html>

    正确姿势,可遍历到HTMLCollection中的每一个元素

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>HTMLColletion</title>
    </head>
    <body>
    
        <div>test div1</div>
        <div>test div2</div>
        <div>test div3</div>
    
    
        <script type="text/javascript">
    
            var divs = document.getElementsByTagName("div");
    
    
            for(var i=0;i<divs.length;i++){
                alert(divs[i].innerHTML);
            }
    
    
        </script>
    
    </body>
    </html>

    3 如何方便遍历数组

    使用数组自带的foreach方法

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>foreach</title>
    </head>
    <body>
    
        <div>test div1</div>
        <div>test div2</div>
        <div>test div3</div>
    
    
        <script type="text/javascript">
    
            var array = ["kerita","john","dorsun"];
    
            array.forEach( function(element, index) {
                window.alert(element);
            });
    
        </script>
    
    </body>
    </html>

    HTMLCollection利用对象冒充也可以使用这种方法。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>HTMLColletion</title>
    </head>
    <body>
    
        <div>test div1</div>
        <div>test div2</div>
        <div>test div3</div>
    
    
        <script type="text/javascript">
    
            var divs = document.getElementsByTagName("div");
    
            [].forEach.call(divs,function(element){
                alert(element.innerHTML);
            });
    
        </script>
    
    </body>
    </html>
  • 相关阅读:
    【BZOJ1924】【SDOI2010】所驼门王的宝藏(Tarjan,SPFA)
    【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)
    【BZOJ1008】【HNOI2008】越狱(组合数学)
    【HNOI2004】敲砖块(动态规划)
    【Luogu1919】 A*B Problem升级版(FFT)
    【Luogu3803】多项式乘法FFT(FFT)
    【Luogu3919】可持久化数组(主席树)
    【NOIP2016】换教室(动态规划)
    【NOIP2015】斗地主(搜索,贪心)
    【NOIP2015】子串(动态规划)
  • 原文地址:https://www.cnblogs.com/kerita/p/5351651.html
Copyright © 2011-2022 走看看