zoukankan      html  css  js  c++  java
  • jQuery each,避免使用js for循环

    What is the difference between $.each(selector) and $(selector).each():

    http://stackoverflow.com/questions/6611190/what-is-the-difference-between-eachselector-and-selector-each

    .each is an iterator that is used to iterate over only jQuery objects collection while jQuery.each($.each) is a general function for iterating over javascript objects and arrays.

     

    jQuery.each(object, [callback])

    概述

    通用例遍方法,可用于例遍对象和数组。

    不同于例遍 jQuery 对象的 $().each() 方法,此方法可用于例遍任何对象。回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容。如果需要退出 each 循环可使回调函数返回 false,其它返回值将被忽略。

    参数

    object,[callback]Object,FunctionV1.0

    object:需要例遍的对象或数组。

    callback:每个成员/元素执行的回调函数。

    示例

    描述:

    例遍数组,同时使用元素索引和内容。

    jQuery 代码:
    $.each( [0,1,2], function(i, n){
      alert( "Item #" + i + ": " + n );
    });

    描述:

    例遍对象,同时使用成员名称和变量内容。

    jQuery 代码:
    $.each( { name: "John", lang: "JS" }, function(i, n){
      alert( "Name: " + i + ", Value: " + n );
    });

     注意: $.each()函数会在内部检索并且使用传递集合的 length属性。 所以,如果集合有一个名为length的属性 - 比如 {bar: 'foo', length: 10} - 这个函数可能无法正常工作。

    我们可以在$.each()返回false来终止迭代。返回非false相当于一个循环中的continue语句,这意味着,它会立即跳出当前的迭代,转到下一个迭代。

    但是如果想让整个函数返回false呢????

    checkCarTypes: function(){
                var carTypesSelects = $("select[name=ttmSupplierCarTypeId]");
                var numReg = (/^([1-9]d*|[0]{1,1})$/);
                var a = true;
                carTypesSelects.each(function(index,value){
                    var price = $(this).parent().siblings().find("input[name=price]").val();
                    var marketPrice = $(this).parent().siblings().find("input[name=marketPrice]").val();
                    var floorPrice = $(this).parent().siblings().find("input[name=floorPrice]").val();
                    if($(this).val() !== "-1"){
                        if(price==="" || marketPrice==="" || floorPrice==="") {
                            alert("车型价格必填!");
                            a = false;
                            return false;
                        }else if(numReg.test(price) === false || numReg.test(marketPrice) === false || numReg.test(floorPrice) === false){
                            alert("车型价格为大于等于0的数字!")
                            a = false;
                            return false;
                        }
                    }
                })
                return a;
            }

     

    $().each(callback)

    概述

    以每一个匹配的元素作为上下文来执行一个函数。

    意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整型)。 返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')。

    参数

    callbackFunctionV1.0

    对于每个匹配的元素所要执行的函数

    示例

    描述:

    迭代两个图像,并设置它们的 src 属性。注意:此处 this 指代的是 DOM 对象而非 jQuery 对象。

    HTML 代码:
    <img/><img/>
    jQuery 代码:
    $("img").each(function(i){
       this.src = "test" + i + ".jpg";
     });
    结果:
    [ <img src="test0.jpg" />, <img src="test1.jpg" /> ]

    描述:

    如果你想得到 jQuery对象,可以使用 $(this) 函数。

    HTML 代码:
    <button>Change colors</button>
    <span></span> 
    <div></div> 
    <div></div>
    
    <div></div> 
    <div></div>
    <div id="stop">Stop here</div> 
    <div></div>
    
    <div></div>
    <div></div>
    jQuery 代码:
    $("img").each(function(){
      $(this).toggleClass("example");
    });

    描述:

    你可以使用 'return' 来提前跳出 each() 循环。

    HTML 代码:
    <button>Change colors</button>
    <span></span> 
    <div></div> 
    <div></div>
    
    <div></div> 
    <div></div>
    <div id="stop">Stop here</div> 
    <div></div>
    
    <div></div>
    <div></div>
    jQuery 代码:
    $("button").click(function () { 
    $("div").each(function (index, domEle) { 
      // domEle == this 
      $(domEle).css("backgroundColor", "yellow");  
      if ($(this).is("#stop")) { 
      $("span").text("Stopped at div index #" + index); 
      return false; 
      } 
    });
    })


    用each而不用for循环。可以避免出现这种问题:

    for (var i = 0; i < 5; i++) {
            console.log(i)
        };
        for (var i = 0; i < 5; i++) {
            setTimeout(function () {
                console.log(i);
            }, 100);
        }
        $.each([4,3,6],function(i,ele){
            setTimeout(function () {
                //2s之后全部同时输出,三个定时器起始时间一样
                console.log(ele);
            }, 2000);
        })
      $.each([4,3,6],function(i,ele){
       setTimeout(function () {
       //间隔1s输出
      console.log(ele);
      }, 1000+1000*i);
      })
     


    或者点击事件(用闭包来解决,我突然就懂了。。。)

    var liList = document.querySelectorAll("#wrapper li");
        for(var i = 0; i < liList.length; i++){
            (function(num){
                liList[num].onclick = function(){
    //            console.log(this.innerHTML);//这个总不会错的
                    console.log(num);
                }
            })(i)
        }

     用jQuery可以避免那些问题,用index获得索引值。

    $("#wrapper li").on("click",function(ele){
            console.log($(this).index());
        })
  • 相关阅读:
    Jms的MessageListener中的Jms事务
    Maven依赖排除 禁止依赖传递 取消依赖的方法
    数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
    【JMS】JMS之ActiveMQ的使用
    servlet3.0 新特性——异步处理
    pyCharm远程调试
    pycharm激活方法(包括永久激活)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 3: invalid start byte错误解决办法
    Python数据分析Pandas的编程经验总结
    java版的状态机实现
  • 原文地址:https://www.cnblogs.com/darr/p/4648524.html
Copyright © 2011-2022 走看看