jquery之封装插件

今天就讲一下jquery封装插件的方法吧,看完这个,你就会认识到jquery里面好多功能的由来,以后也不用对jquery那么陌生了,会有一种亲近感了,嘻嘻。
不过我们现在还是用人家现成的插件,以后有时间一定要通读一遍源码。
好了,回到正题,今天主要讲jQuery.extend()和jQuery.fn.extend()两种方法的用法。

一、首先讲一下jQuery封装的插件:
1.封装对象方法的插件
例:$(element).text()
2.封装全局函数的插件
例:$.trim()
3.选择器插件
例:color(red)选择所有红色字的元素;
封装插件的要点:
1.jquery插件的命名为jquery.[插件名].js;
2.所有的对象方法即上面的(1)附加到jQuery.fn对象上,而所有的全局函数附加到jQuery对象本身上;
3.插件内部,this指的是选择器获取的jQuery对象,而非click()方法内部指的是dom元素。
4.所有的方法和函数插件都应该以分号结尾,以方便压缩,前面可以也加个分号;当然一般使用闭包来解决;
5.插件应该返回一个Jquey对象,一遍链式操作
链式操作:即$(element).css().attr()
6.避免在插件内部使用$作为jQuery对象的别名,使用完整的jQuery来表示,以避免冲突;
7.这两种封装方法传递进来的应该是纯正的object形式,即”函数或方法名/函数主体”;
不规范:

var cc = 2;
var jQuery = function(cc){
     $ = jQuery;
    alert(cc);
}
$(function(){
    jQuery();
});

规范:

(function($){
    alert(1);
})(jQuery);

二、jquery插件的机制
该机制的主要优点是:添加新选项也不必影响到以前已经定义好的方法;
另外还可以设置插件方法的一系列参数。

var setting = {id:1,name:"tom",age:"30"};
var options={id:2,name:"Bob"};
var newOptions = jQuery.extend(setting,options);

结果为 newOptions ={id:2,name:”Bob”,age:”30”};
因此我们以后调用函数的参数时可以这么用:

function foo(options){
    options=jQuery.extend({
        name:"",
        id:1,
        age:12//默认参数
    },options);
}

三、编写jQuery插件
1.封装jquery对象的插件
封装模板

;(function($){

})(jQuery);

实现:

;(function($){
    $.fn.extend({
        "color":function(value){
        return this.css("color",value);
    }
    });
})(jQuery);

//调用
$(element).color(red);

2.封装全局函数的插件

;(function($){
    $.extend(){
        "ltrim1":function(text){
            return (text);
        },
        "ltrim2":function(text){
        return (text);
        },
    }
})(jQuery);

//调用
$.ltrim1("abc");
$.ltrim2("abc");

3.自定义选择器
原理:jquery选择符解析器首先会使用一组正则表达式来解析选择器,然后正对解析出的每个选择符执行一个函数,成为选择器函数,最后根据这个选择器函数的返回值为true还是false来决定是否保留这个元素。
直接举个例子吧

;(function($){
    $.extend($.expr[":"],{
        between:function(a,i,m){
            var tmp = m[3].split(",");
            return tmp[0]-0<i&&i<tmp[1]-0;
        }
    });
})(jQuery);

//应用
$("div:between(2,5)").css("display","none");

四、其它

$.fn.function用于添加单个方法
$.fn.extend 用于添加多个方法
$.fn是一个命名空间(命名空间的主要作用是防止变量名混淆),也是一个对象,其实jQuery.fn =jQuery.fn.init.prototype,所以它本身而言肯定是可以直接添加方法的了,这是js规定的了;而$.fn.extend只是规范的封装了一种添加对象方法的方式。(不用纠结)

$.fn.aaa = function() {}
$.fn.extend({
    aaa: function() {}
});
jQuery.prototype = jQuery.fn = jQuery.fn.init.prototype

需要理解一下这个:
参考:http://www.2cto.com/kf/201506/404398.html
http://blog.csdn.net/clerk0324/article/details/22498633

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值