对于jQuery之前一直用,也看到过别人写的插件,直到最近才想着学习怎么写自己的jQuery插件,今天看了网上的一些资料,发现其实很简单的。

先看一个简单的jQuery插件的例子

<script>

(function($){
$.fn.extend({
"bold":function(){
return this.css({fontWeight:"bold"});
},
"red":function(){
return this.css({color:"red"});
}
});
})(jQuery); </script>

使用的时候要先导入jquery插件,比如$("p").bold().red(),这样p标签内容就会变为红色粗体。

那么,如何写一个正确的jQuery的插件呢?

首先,插件的结构是这样的

(function($){

 })(jQuery);

这种结构在javascript中叫做闭包,能够不被编译器执行。

然后,在闭包中写插件的功能,有两种写法

第一种:就是上面例子中的,这种适合写有多个函数的插件,例子中的bold和red就是定义的两个插件的名字。

第二种:

    (function($){

        jQuery.fn.bold=function(){
return this.css({fontWeight:"bold"});
};
jQuery.fn.red=function(){
return this.css({"color":"red"});
} })(jQuery);

可以看做是定义了两个函数,分别是bold和red。

jQuery.extend()的介绍和使用

注意,区别于上面的jQuery.fn.extend()。

jQuery.extend()有几个重载方法

一、jQuery.extend(desc,src1,src2,src3...)

用来把后面的参数src1、src2。。合并到desc中,比如

var src1={name:petty,age:20}
var src2={name:tim,sex:female}
var desc={name:tom}
var result=jQuery.extend(desc,src1,src2),

结果result={name:tim,age:20,sex:female},同时desc也变为合并后的值,也就是说如果后面的参数和前面的参数有相同的属性值,则后面的属性会覆盖前面的属性。有时候我们不希望改变desc的值,则可以用{}代替desc,

jQuery.extend({},src1,src2,...)

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

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

二、jQuery.extend(boolean,desc,src1,src2...)

第一个boolean为布尔值,意为是否深度覆盖,后面的参数与上面的一致。所谓深度覆盖,看下面的例子。

var result=jQuery.extend(true,{},
{name:tim,size:{width:20,length:30}},
{name:cat,age:20,size:{width:10,height:50})

则结果为result={name:cat,age:20,size:{width:10,length:30,height:50}}

如果第一个参数为false,则结果应该是这样result={name:cat,age:20,size:{width:10,height:50}}

下面是一个较完整的例子

    <script type="text/javascript">
(function($){
jQuery.fn.bold=function(options){
var result=jQuery.extend(defaults,options);
return this.css({fontWeight:result.fontWeight});
};
jQuery.fn.color=function(options){
var result=jQuery.extend(defaults,options);
return this.css({"color":result.color});
}; var defaults={
fontWeight:"bold",
color:"green"
}; })(jQuery); $(function(){
var options={
color:"red"
};
$("p").bold().color(options);
});
</script>

jQuery插件的怎么写的更多相关文章

  1. jQuery插件——下拉选择框

    其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $. ...

  2. 自己写jquery插件之模版插件高级篇(一)

    需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...

  3. 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

    1.表单验证插件Validation   2.表单插件Form   3.动态事件绑定插件livequery 可以为后来的元素绑定事件   类似于jQuery中的live()方法     4.jQuer ...

  4. 什么?你还不会写JQuery 插件

    前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论 ...

  5. 写JQuery 插件 什么?你还不会写JQuery 插件

    http://www.cnblogs.com/Leo_wl/p/3409083.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui ...

  6. 写jQuery插件

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...

  7. 写JQuery插件的基本知识

    普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: 复制代码 代码如下: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.exten ...

  8. 教你写Jquery插件

    最近很多网友说 jQuery插件是什么啊?怎么写的啊?我不会写啊? 一大堆的问题一时都不知道怎么回答他们,个人认为是网友们把问题复杂化了. 其实就是把一些常用.实用.通用的功能封装起来而以,简单的来讲 ...

  9. [原创作品]手把手教你怎么写jQuery插件

    这次随笔,向大家介绍如何编写jQuery插件.啰嗦一下,很希望各位IT界的‘攻城狮’们能和大家一起分享,一起成长.点击左边我头像下边的“加入qq群”,一起分享,一起交流,当然,可以一起吹水.哈,不废话 ...

随机推荐

  1. vue监听数组中某个属性,计算其他属性问题

    今天在项目开发中遇到一个根据数组中某个属性变化同时更新另一个属性变化的问题,刚开始代码如下 this.weekList1=r.data.roomProducts; this.weekList1.map ...

  2. nyoj_19_擅长排列的小明_201403011600

    擅长排列的小明时间限制:1000 ms  |  内存限制:65535 KB 难度:4描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他, ...

  3. 洛谷——P1031 均分纸牌

    https://www.luogu.org/problem/show?pid=1031#sub 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以 ...

  4. Android 开发 ContentProvider 获取歌曲列表和联系人的样例

    ContentProvider(内容提供者)是Android中的四大组件之中的一个. 主要用于对外共享数据.也就是通过ContentProvider把应用中的数据共享给其它应用訪问.其它应用能够通过C ...

  5. 详略。。设计模式1——单例。。。。studying

    设计模式1--单例 解决:保证了一个类在内存中仅仅能有一个对象. 怎么做才干保证这个对象是唯一的呢? 思路: 1.假设其它程序可以任意用new创建该类对象,那么就无法控制个数.因此,不让其它程序用ne ...

  6. 从头认识Spring-2.7 自己主动检測Bean(1)-@Component @Repository @Service @Controller

    这一章节我们来讨论一下自己主动检測Bean. 1.domain 厨师类: package com.raylee.my_new_spring.my_new_spring.ch02.topic_1_19; ...

  7. Android自己定义组件系列【1】——自己定义View及ViewGroup

    View类是ViewGroup的父类,ViewGroup具有View的全部特性.ViewGroup主要用来充当View的容器.将当中的View作为自己孩子,并对其进行管理.当然孩子也能够是ViewGr ...

  8. java多线程设置优先级

    package com.itbuluoge.mythread; class SimpleThread extends Thread { private int priority; public Sim ...

  9. 使用百度地图API进行Android地图应用开发(Eclipse)

    随着基于位置的服务的兴起,地图类App呈现爆发趋势.随着而来的是地图供应商开放大量的API.供开发人员开发基于PC或者移动端的应用程序. 如今我们研究使用百度地图SDK进行Android项目的开发. ...

  10. OC基础回想(十一)类别

         在编写面向对象的程序时,常常要为现有的类加入一些新的行为,通常採用创建子类的方法. 只是有时候子类不方便.比方,想为NSString类加入一个新的行为,可是NSString实际上仅仅是一个类 ...