jQuery插件的怎么写
对于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插件的怎么写的更多相关文章
- jQuery插件——下拉选择框
其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $. ...
- 自己写jquery插件之模版插件高级篇(一)
需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...
- 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]
1.表单验证插件Validation 2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuer ...
- 什么?你还不会写JQuery 插件
前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论 ...
- 写JQuery 插件 什么?你还不会写JQuery 插件
http://www.cnblogs.com/Leo_wl/p/3409083.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui ...
- 写jQuery插件
如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...
- 写JQuery插件的基本知识
普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: 复制代码 代码如下: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.exten ...
- 教你写Jquery插件
最近很多网友说 jQuery插件是什么啊?怎么写的啊?我不会写啊? 一大堆的问题一时都不知道怎么回答他们,个人认为是网友们把问题复杂化了. 其实就是把一些常用.实用.通用的功能封装起来而以,简单的来讲 ...
- [原创作品]手把手教你怎么写jQuery插件
这次随笔,向大家介绍如何编写jQuery插件.啰嗦一下,很希望各位IT界的‘攻城狮’们能和大家一起分享,一起成长.点击左边我头像下边的“加入qq群”,一起分享,一起交流,当然,可以一起吹水.哈,不废话 ...
随机推荐
- ubuntu添加开机自启和sysv-rc-conf
此文ubuntu使用sysvinit,而非upstart UBUNTU添加开机自动启动程序方法 1. 开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程i ...
- [HDU3038]How Many Answers Are Wrong(并查集)
传送门 和某题类似,只不过奇偶换成了和. ——代码 #include <cstdio> #include <iostream> #define N 1000001 int n, ...
- PatentTips – RDMA data transfer in a virtual environment
BACKGROUND Embodiments of this invention relate to RDMA (remote direct memory access) data transfer ...
- centos7安装opennms-17.0.0
https://blog.csdn.net/jiangzhexi/article/details/52036858 http://www.jb51.net/os/RedHat/281470.html
- Centos6.7搭建ISCSI存储服务器
https://blog.csdn.net/yuner027/article/details/51925146
- MFS搭建
MooseFS是一个分布式存储的框架,其具有如下特性: 1.Free(GPL) 2.通用文件系统,不需要修改上层应用就可以使用 3.可以在线扩容,体系架构可伸缩性极强. ...
- N天学习一个linux命令之kill
用途 用于终止进程 用法 kill [-s signal|-p] [--] pid... kill -l [signal] 说明 1.默认发送信号15(请求终止进程,程序可以捕获,操作系统会杀死没有对 ...
- Clojure:添加gzip功能
利用现有的插件,在Clojure中添加gzip的功能是很方便的.1. 在project.clj中添加对bk/ring-gzip插件的依赖.:dependencies [bk/ring-gzip ...
- Intellij Idea 13:导入openfire源代码
网络上已经有篇关于openfire导入到Intellij Idea的文章(http://www.th7.cn/Program/java/201404/187018.shtml),不过在我导入的过程中, ...
- c++实现数据结构1.顺序表
头文件seqlist.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ #include<iostream> using namespace std; t ...