首页 > 代码库 > JQuery日记 2014-04.29

JQuery日记 2014-04.29

JQuery原型对象(续)

(4).each(callback,args)
迭代JQuery对象上的元素并调用callback参数,如果某次迭代中callback返回false,停止迭代.args为callback的参数,args必须为数组.在callback中this引用的当前迭代的元素.

Test_HTML
<body>
<div id= "div1">div1</div ><div id= "div2">div2</div >
<span id= "span1">span1</span ><span id= "span2">span2</span ><span id="span3" >span3 </span>
</body>

Test_Script
$(function(){
    var $div = $(‘div‘ );
     var args = [":参数" ]
              
     $div.each( function(){
         alert( this.id + arguments[0]);
         return false ;
     },args); //只弹出一次   div1:参 数
});
.each(callback, args)调用了JQuery的静态函数JQuery.each(obj, callback, args)
JQuery.each(obj, callback, args)的源码也比较简单,见注释
   // args is for internal usage only
   each: function( obj, callback, args ) {
                     var value,
                     i = 0,
                     length = obj.length,
                     isArray = isArraylike( obj );
               //如果有参数
               if ( args ) {
                      //如果是类数组
                      //则用使用obj[下标]的方式访问迭代的元素
                      if ( isArray ) {
                            for ( ; i < length; i++ ) {
                                   //绑定回调函数的执行作用域,即回调函数使用this时,this指向当前迭代的元素,回调函数的参数为传入的args
                                  value = http://www.mamicode.com/callback.apply( obj[ i ], args );>
(5) .map(callback)
    迭代JQuery对象中的元素,每次迭代执行callback方法,返回callback返回值数组组成的新的JQuery对象.
   
   Test_Html
       <body>
        <div id= "div1" >div1 </div >< div id= "div2" >div2 </div >
        <span id= "span1" >span1 </span >< span id= "span2" >span2 </span >< span id ="span3" >span3</span>
    </body>
     Test_Script
 var $div = $(‘div‘ );
              
     $div.map( function (){
         return this .parentNode;
     }).each( function (){
        alert( this .tagName); //弹出两次 BODY
     }); 
    map源码:
map: function( callback ) {
         return this .pushStack( jQuery.map( this, function ( elem, i ) {
             return callback.call( elem, i, elem );
         }));
    },
    .map(callback)调用$.map()根据其返回的元素数组返回一个新的JQuery对象.
    $.map(elements, callback, arg)源码
map: function( elems, callback, arg ) {
               var value,
                     i = 0,
                     length = elems.length,
                     isArray = isArraylike( elems ),
                      //存放结果的数组
                      ret = [];
               // Go through the array, translating each of the items to their new values
               if ( isArray ) {
                      for ( ; i < length; i++ ) {
                            //嗲用callback绑定执行作用域为当前迭代元素
                           value = http://www.mamicode.com/callback( elems[ i ], i, arg );>

     

JQuery日记 2014-04.29