分享

读jq之四(实用方法)

 quasiceo 2012-11-23

这篇看了jQuery.map,jQuery().map,jQuery.grep,jQuery.merge。

 

1,jQuery.map

该方法是挂在functoin jQuery上静态方法,通过jQuery.extend({...})方式扩展的。作用是数组(伪数组)每个元素上运行一个函数,返回新修改的数组。

见:http://api./jQuery.map/

 

2,jQuery().map

该方法是jquery对象的一个方法,和jQuery().each一样挂在jQuery.prototype上的。其调用静态的jQuery.map,第一个参数是tihs,该this即为jquery对象自身。它只能对jQuery对象进行修改。

见:http://api./map/

 

3,jQuery.grep

该方法是挂在function jQuery上的静态方法,通过jQuery.extend({...})方式扩展的。作用是过滤数组。

见:http://api./jQuery.grep/

 

4,jQuery.merge

该方法是挂在function jQuery上的静态方法,通过jQuery.extend({...})方式扩展的。作用是合并两个数组,第一个参数数组会被修改。

见:http://api./jQuery.merge/

 

简化如下:

Js代码  收藏代码
  1. function $(selector){  
  2.     return new $.prototype.init(selector);  
  3. }  
  4. $.fn=$.prototype={     
  5.     //简化的选择器,为测试$().each方法。这里只需返回一个element集合即可  
  6.     init:function(selector){  
  7.         var els = document.getElementsByTagName(selector);  
  8.         for(var i=0;i<els.length;i++){  
  9.             this[i]=els[i];  
  10.         }         
  11.         this.length=els.length;  
  12.     },  
  13.     //$().each,调用静态的$.each  
  14.     each:function(callback){  
  15.         return $.each( this, callback );  
  16.     },  
  17.     //$("p").map,调用静态的$.map  
  18.     map: function( callback ) {  
  19.         return $.map(thisfunction( elem, i ) {  
  20.             return callback.call( elem, i, elem );  
  21.         });  
  22.     }  
  23. }  
  24. $.fn.init.prototype=$.fn;  
  25.   
  26. //简化的extend           
  27. $.extend = function(obj){  
  28.     for(var a in obj)  
  29.         this[a] = obj[a];  
  30. };  
  31.   
  32. //给$上添加一些静态方法  
  33. $.extend({  
  34.     //简化的$.each,可以迭代数组和对象  
  35.     each : function(object,callback){  
  36.         var name, i = 0,  
  37.         length = object.length,  
  38.         isObj = length === undefined;  
  39.                   
  40.         if ( isObj ) {//对对象进行迭代  
  41.             for ( name in object ) {          
  42.                 if ( callback.call( object[ name ], name, object[ name ] ) === false ) {  
  43.                     break;  
  44.                 }  
  45.             }         
  46.         } else {//对数组进行迭代  
  47.             for ( var value = object[0];  
  48.                 i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}  
  49.         }         
  50.     },  
  51.     //合并两个数组,会改变first  
  52.     merge: function( first, second ) {  
  53.         var i = first.length, j = 0;  
  54.   
  55.         if ( typeof second.length === "number" ) {  
  56.             for ( var l = second.length; j < l; j++ ) {  
  57.                 first[ i++ ] = second[ j ];  
  58.             }  
  59.         } else {  
  60.             while ( second[j] !== undefined ) {  
  61.                 first[ i++ ] = second[ j++ ];  
  62.             }  
  63.         }  
  64.         first.length = i;  
  65.         return first;  
  66.     },  
  67.     //数组每个元素上运行一个函数,返回新修改的数组  
  68.     map: function( elems, callback ) {  
  69.         var ret = [], value;  
  70.   
  71.         for ( var i = 0, length = elems.length; i < length; i++ ) {  
  72.             value = callback( elems[ i ], i );  
  73.             if ( value != null ) {  
  74.                 ret[ ret.length ] = value;  
  75.             }  
  76.         }  
  77.         return ret.concat.apply( [], ret );  
  78.     },  
  79.     //过滤数组  
  80.     grep: function( elems, callback, inv ) {  
  81.         var ret = [];  
  82.           
  83.         for ( var i = 0, length = elems.length; i < length; i++ ) {  
  84.             if ( !inv !== !callback( elems[ i ], i ) ) {  
  85.                 ret.push( elems[ i ] );  
  86.             }  
  87.         }  
  88.         return ret;  
  89.     }  
  90. });  
 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多