zoukankan      html  css  js  c++  java
  • jquery 里的each使用方法详解

    jquery 里的each使用方法详解
    有个同事问我each使用方法,我把我知道的用法告诉他.他却说不是这样的......如是在网上小逛了一下,果然用法有很多.下面总结下大慨的使用方法.
    each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象、数组的属性值并进行处理。jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话 说:jQuery提供的each方法是对参数一提供的对象的中所有的子元素逐一进行方法调用。而jQuery对象提供的each方法则是对jQuery内 部的子元素进行逐个调用。

    这个JQUERY里的核心代码
    jQuery.prototype.each=function( fn, args ) {
    return jQuery.each( this, fn, args );
    }

    让我们看一下jQuery提供的each方法的具体实现,
    jQuery.each(obj,fn,arg)
    该方法有三个参数:进行操作的对象obj,进行操作的函数fn,函数的参数args。
    让我们根据ojb对象进行讨论:

    1.obj对象是数组
    each方法会对数组中子元素的逐个进行fn函数调用,直至调用某个子元素返回的结果为false为止,也就是说,我们可以在提供的fn函数进行处理,使 之满足一定条件后就退出each方法调用。当each方法提供了arg参数时,fn函数调用传入的参数为arg,否则为:子元素索引,子元素本身
    2.obj 对象不是数组
    该方法同1的最大区别是:fn方法会被逐次不考虑返回值的进行进行。换句话说,obj对象的所有属性都会被fn方法进行调用,即使fn函数返回false。调用传入的参数同1类似。
    jQuery.each=function( obj, fn, args ) {
    if ( args ) {
    if ( obj.length == undefined ){
    for ( var i in obj )
    fn.apply( obj, args );
    }else{
    for ( var i = 0, ol = obj.length; i < ol; i++ ) {
    if ( fn.apply( obj, args ) === false )
    break;

    }

    }
    } else {
    if ( obj.length == undefined ) {
    for ( var i in obj )
    fn.call( obj, i, obj );
    }else{
    for ( var i = 0, ol = obj.length, val = obj[0]; i < ol && fn.call(val,i,val) !== false; val = obj[++i] ){}

    }
    }
    return obj;
    }
    需要特别注意的是each方法中fn的具体调用方法并不是采用简单的fn(i,val)或fn(args),而是采用了 fn.call(val,i,val)或fn.apply(obj.args)的形式,这意味着,在你自己的fn的实现中,可以直接采用this指针引用 数组或是对象的子元素。这种方式是绝大多数jQuery所采用的一种实现方式。

    还是通过实例来说明吧

    先看代码:

    $("#submit").click(function(){
    try{
    $('#leftTbl tr').each(function(i){
    var emailInput = $("#email_"+(1+i));
    if(!re.test(emailInput.val())){
    alert("请正确填写email");
    emailInput.focus();
    throw emailInput;
    }else{
    email = emailInput.val();
    }
    });
    }catch(e){
    return false;
    }
    $("#pageform").submit();
    });

    通过throw 然后catch实现,也可以做了计数器到最后判断他的值!

    上面的代码似乎和标题没什么关系,那么在each里如何实现break与continue 其实看下面还是有关系的…

    $('input').each(function(){
    if($(this).val() == ''){
    // do something
    if(1==1)return false; // 使用return false 来实现跳出循环。
    else return true; // 使用return true 来实现进入下一个循环。
    }
    });

    jquery里面应该是迭代每一个元素后查看返回的值,判断是否继续迭代下一个元素
    原创文章,转载请注明:同路吧 www.tlbar.com.cn

    var arr = [ "one", "two", "three", "four"];
    $.each(arr, function(){
    alert(this);
    });
    //上面这个each输出的结果分别为:one,two,three,four

    var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]]
    $.each(arr1, function(i, item){
    alert(item[0]);
    });
    //其实arr1为一个二维数组,item相当于取每一个一维数组,
    //item[0]相对于取每一个一维数组里的第一个值
    //所以上面这个each输出分别为:1 4 7


    var obj = { one:1, two:2, three:3, four:4};
    $.each(obj, function(key, val) {
    alert(obj[key]);
    });
    //这个each就有更厉害了,能循环每一个属性
    //输出结果为:1 2 3 4
    原创文章,转载请注明:同路吧 www.tlbar.com.cn

    原文地址:http://www.tlbar.com.cn/?q=content/jquery-%E9%87%8C%E7%9A%84each%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E8%AF%A6%E8%A7%A3

  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/yewei798/p/1912532.html
Copyright © 2011-2022 走看看