随身笔记
随身笔记

jquery封装插件

jquery插件 开发插件

jquery封装的插件,是为了日后调用起来方便,只需要输入参数即可实现我们需要的效果。
jquery为我们提供了$.extend和$.fn.extend的方法,一个是全局封装一个是局部封装,

$.extend为jQuery类添加类方法

$.fn.extend是对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”,我们基本也这么写

 

 

// 1,第一个参数不写布尔值,默认是false浅拷贝,意思就是对象里面还有对象的话,那么就以最后一个覆盖前面一个https://sdeno.com/?p=3055
// 2,如果有2个对象的话,2个对象会进行合并,至于深拷贝还是浅拷贝看第一个参数的设置。
// 3,如果就一个对象的话,则会根据你使用的是$.extend还是$.fn.extend,进行jQuery类的扩展,还是为jQuery添加成员”属性和方法了,一般为jQuery扩展插件也是以这样的方法,也就是只传入一个对象,则就会把jQuery当作目标和传入的对象合并。

$.extend(false,{},{},{},…);

 

不管$.fn.extend还是$.extend,如果里面的参数只有一个对象的话,那么目标对象就会是jQuery.fn或者jQuery。参数对象就会被合并到jQuery中。所以我们常用这种方式去扩展jQuery插件。

例如:

;(function($){
   $.fn.extend({
      'color':function(value1,value2){
       $(this).css({'color':value1,'background':value2});
   }
 });
 })(jQuery);
 调用只需要:
 $('div').color('red','yellow');
还有另一种调用方式:$('#wo').color({fc:'#000',bg:'yellow'},function(){ //回调 });
;(function($){
    $.fn.extend({
 
        'color':function(opt,fn){ //opt 新值
             var oldvalue={//默认值
                bg:'yellow',
                fc:'pink',
                bor:'1px solid red'
             } 

             var resule=$.extend({},oldvalue,opt||{});//设置新信就会覆盖久值,没有设置就使用默认值
             var _this=$(this);
-----------------------------------------------------------------------------------------------以下是完成回调部分代码
             var wait = function(dtd){
             var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象
             var tasks = function(){
               _this.css({'color':resule.fc,'background':resule.bg,'border':resule.bor});
              dtd.resolve(); // 修改$.Deferred()状态为成功
             };
             tasks();
             return dtd.promise(); // 返回promise对象,防止外面随意修改$.Deferred()状态
             };

             $.when(wait())
             .  done(function(){ 
                    if(typeof fn == 'function'){
                        fn();
                  }
              }) //成功之后的回
------------------------------------------------------------------------------------------------------
          }//color
 
    })
})(jQuery);

案例下载:http://pan.baidu.com/s/1bntuZi3

 

还有另一种封装代码的形式:

(function($) { 
    $.fn.watch = function(callback) { 
          return $(this).each(function() { 
         //缓存以前的值 
        $.data(this, 'originVal', $(this).val()); //代码初始化先执行了这里
 
        //event 
       $(this).on('keyup paste', function() { 
              var originVal = $.data(this, 'originVal'); 
             var currentVal = $(this).val(); 
            console.log('之前值:'+originVal);
            console.log('现在值:'+currentVal);
 
 
           if (originVal !== currentVal) { 
               $.data(this, 'originVal', $(this).val()); 
               callback(currentVal); 
           } 
       }); 
   }); 
 } 
})(jQuery);

 

调用:
$(function(){
  $(".tx").watch(function(value) { 
      document.title=value;
  });
});

两种代码封装效果都是一样的,我跟人比较倾向于第一种。

 

 

 

以上是局部封装,全局封装只需要修改成$.extend即可。

封装在$.extend里面如果调用就使用

extend1

调用:

$.liu()  //这样就能调用,类似$.ajax();

为jQuery类添加添加类方法,可以理解为添加静态方法。如:
$.extend({ 
   add:function(a,b){return a+b;} 
}); 
便为 jQuery 添加一个为 add 的 “静态方法”,之后便可以在引入 jQuery 的地方,使用这个方法了,$.add(3,4); //return 7

http://jingyan.baidu.com/article/fec4bce259ef67f2608d8b10.html

jquery_fz

 

——————————————————————————————————-

http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729563.html

jQuery.extend 函数详解

JQuery的extend扩展方法:
Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解。
 一、Jquery的扩展方法原型是:

extend(dest,src1,src2,src3…);

它的含义是将src1,src2,src3…合并到dest中,返回值为合并后的dest,由此可以看出该方法合并后,是修改了dest的结构的。如果想要得到合并的结果却又不想修改dest的结构,可以如下使用:

var newSrc=$.extend({},src1,src2,src3…)//也就是将”{}”作为dest参数。

这样就可以将src1,src2,src3…进行合并,然后将合并结果返回给newSrc了。如下例:

var result=$.extend({},{name:Tom,age:21},{name:Jerry,sex:Boy})

 

那么合并后的结果

result={name:Jerry,age:21,sex:Boy}

也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。

二、省略dest参数
上述的extend方法原型中的dest参数是可以省略的,如果省略了,则该方法就只能有一个src参数,而且是将该src合并到调用extend方法的对象中去,如:
1、$.extend(src)
   该方法就是将src合并到jquery的全局对象中去,如:

$.extend({
hello:function(){alert(
hello);}
});

就是将hello方法合并到jquery的全局对象中。
2、$.fn.extend(src)
该方法将src合并到jquery的实例对象中去,如:

$.fn.extend({
hello:function(){alert(
hello);}
});

 

就是将hello方法合并到jquery的实例对象中。

下面例举几个常用的扩展实例:

$.extend({net:{}});

 

这是在jquery全局对象中扩展一个net命名空间。

$.extend($.net,{
hello:function(){alert(
hello);}
})

这是将hello方法扩展到之前扩展的Jquery的net命名空间中去。

三、Jquery的extend方法还有一个重载原型:

extend(boolean,dest,src1,src2,src3…)

第一个参数boolean代表是否进行深度拷贝,其余参数和前面介绍的一致,什么叫深层拷贝,我们看一个例子:

var result=$.extend( true, {},
{ name:
John, location: {city: Boston,county:USA} },
{ last:
Resig, location: {state: MA,county:China} } );

我们可以看出src1中嵌套子对象location:{city:”Boston”},src2中也嵌套子对象location:{state:”MA”},第一个深度拷贝参数为true,那么合并后的结果就是:

result={name:John,last:Resig,
location:{city:
Boston,state:MA,county:China}}

 

也就是说它会将src中的嵌套子对象也进行合并,而如果第一个参数boolean为false,我们看看合并的结果是什么,如下:

var result=$.extend( false, {},
{ name:
John, location:{city: Boston,county:USA} },
{ last:
Resig, location: {state: MA,county:China} }
);

那么合并后的结果就是:

result={name:John,last:Resig,location:{state:MA,county:China}}

 

 

$.extend(true,a,b)

true // a继承了b的属性和方法,如果在a中修改属性的话也会修改到了b,为了不受影响改true。

false // 默认参数,a继承了b的属性和方法,如果在a中修改属性的话也会修改到了b

以上就是$.extend()在项目中经常会使用到的一些细节。

 

对extend的一些认识:要配合jQuery原生代码理解

《jQuery.extend和jQuery.fn.extend区别》

 

随身笔记

jquery封装插件
jquery插件 开发插件 jquery封装的插件,是为了日后调用起来方便,只需要输入参数即可实现我们需要的效果。 jquery为我们提供了$.extend和$.fn.extend的方法,一个是全局封装一个是局…
扫描二维码继续阅读
2014-09-17