• 循环


      jquery的.each()循环可以循环数组和对象,有2种写法,第二种该方法用来让DOM循环结构更简单更不易出错。它会迭代jQuery对象中的每一个DOM元素。每次回调函数执行时,会传递当前循环次数作为参数(从0开始计数)。更重要的是,回调函数是在当前DOM元素为上下文的语境中触发的。因此关键字 this 总是指向这个元素。

    一、$.each()

    写法:

    $..each(obj, function(i, v) )
    

      参数介绍:

    •   obj--要循环的量
    •   i--index
    •   v--value

    循环数组:

    var arr=['a','b'];
        $.each(arr,function(i,v){
            console.log(i);
            console.log(v);
        });
    

      则打印结果为:

    i--  0   1

    v--  a  b

    循环2维数组:

    var arr2=[[1,2],[11,22]];
        $.each(arr2,function(i,v){
            console.log(i);
            console.log(v);
        });

      则打印结果为:

    i--  0   1

    v--  [1,2]  [11,22]

    循环对象:

    var obj={a:'aa',b:'bb'};
        $.each(obj,function(i,v){
            console.log(i);
            console.log(v);
        });
    

      则打印结果为:

    i--  b  b

    v--  aa  bb

    jquery的.each()循环自动判断出数组或对象,后面有简介。

    $.each()这种方法不支持dom选取,只能将要循环的量作为参数,操作dom将运用到方法二。

    二、$().each()

    写法:

    $(elm).each(function(i,v){})
    

     直接上代码:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <ul class="ul1">
        <li>my</li>
        <li>name</li>
        <li>is</li>
        <li>nick</li>
    </ul>
    <script src="http://cdn.bootcss.com/jquery/2.2.1/jquery.js"></script>
    <script>
        $('.ul1 li').each(function(i,v){
            console.log(i);
            console.log($(v).html());
        });
    </script>
    </body>
    </html>

      则打印结果为:

    i--  0  1  2  3

    v--  my name is nick

    下面附上jqeury源码供参考:

    function each( obj, callback, args ) {
            var value,
                    i = 0,
                    length = obj.length,
                    isArray = isArraylike( obj );
            if ( args ) {
                if ( isArray ) {
                    for ( ; i < length; i++ ) {
                        value = callback.apply( obj[ i ], args );
                        if ( value === false ) {
                            break;
                        }
                    }
                } else {
                    for ( i in obj ) {
                        value = callback.apply( obj[ i ], args );
    
                        if ( value === false ) {
                            break;
                        }
                    }
                }
                // A special, fast, case for the most common use of each
            } else {
                if ( isArray ) {
                    for ( ; i < length; i++ ) {
                        value = callback.call( obj[ i ], i, obj[ i ] );
    
                        if ( value === false ) {
                            break;
                        }
                    }
                } else {
                    for ( i in obj ) {
                        value = callback.call( obj[ i ], i, obj[ i ] );
    
                        if ( value === false ) {
                            break;
                        }
                    }
                }
            }
            return obj;
        }
    
        function isArraylike( obj ) {
            var length = obj.length,
                    type = jQuery.type( obj );
            if ( type === "function" || jQuery.isWindow( obj ) ) {
                return false;
            }
            if ( obj.nodeType === 1 && length ) {
                return true;
            }
            return type === "array" || length === 0 ||
                    typeof length === "number" && length > 0 && ( length - 1 ) in obj;
        }

      forEach是javascript原生的类似于jquery的循环机制,但不推荐使用!理由有:

    1. 不兼容某些老顽固浏览器,如ie8
    2. 只能循环数组,对象就不行了

    如果你没有使用jquery,循环的话就用for或者for……in吧!

  • 相关阅读:
    ## 序列化和反序列化
    C#小型资源管理器
    codeforces #310 div1 B
    codeforces #310 div1 A
    BZOJ 1030 文本生成器
    BZOJ 2806 cheat
    BZOJ 2553 禁忌
    BZOJ 4199 品酒大会
    codeforces #309 div1 D
    codeforces #309 div1 C
  • 原文地址:https://www.cnblogs.com/puyongsong/p/5998014.html
Copyright © 2020-2023  润新知