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群”,一起分享,一起交流,当然,可以一起吹水.哈,不废话 ...
随机推荐
- vue监听数组中某个属性,计算其他属性问题
今天在项目开发中遇到一个根据数组中某个属性变化同时更新另一个属性变化的问题,刚开始代码如下 this.weekList1=r.data.roomProducts; this.weekList1.map ...
- 【MariaDB】MariaDB vs MySQL - 特性
原文链接: https://mariadb.com/kb/en/mariadb-vs-mysql-features/ xiaomo译------ 支持更多的存储引擎 除了标配的MyISAM, BLAC ...
- 暑假集训D15总结
考试 日常爆炸= = T1数据背锅,回天乏力 推了两个小时的T2竟然莫名RE,我也是服了 T3考试时就没读懂题,做个鬼啊 今天一直在写某奇怪的技术贴,竟然没有写题解(手动滑稽) 希望明天不要乱炸吧 博 ...
- group by语句,聚合函数与其他语句(关系,执行过程)
(本文一切基于SQL SERVER 2008 R2) 先来看一个语句执行过程发生的错误提示: 消息 8120,级别 16,状态 1,第 2 行 选择列表中的列 'SC.CNO' 无效,因为该列没有包含 ...
- P1464 Function 洛谷
https://www.luogu.org/problem/show?pid=1464 题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回 ...
- C++对象模型——对象复制语意学 (Object Copy Semantics)(第五章)
5.3 对象复制语意学 (Object Copy Semantics) 当设计一个 class,并以一个 class object指定给 class object时,有三种选择: 1.什 ...
- 一键解决ScrollView嵌套ListView仅仅显示一行的问题
/** * 解决ScrollView嵌套ListView仅仅显示一行的问题 * * @param listView */ private void setListViewHeightBasedOnCh ...
- 《Android源代码设计模式解析与实战》读书笔记(十八)
第十八章.代理模式 代理模式也称托付模式,是结构型设计模式之中的一个.是应用广泛的模式之中的一个. 1.定义 为其它对象提供一种代理以控制对这个对象的訪问. 2.使用场景 当无法或不想直接訪问某个对象 ...
- poj 3468 A Simple Problem with Integers(线段树+区间更新+区间求和)
题目链接:id=3468http://">http://poj.org/problem? id=3468 A Simple Problem with Integers Time Lim ...
- erlang Unicode 处理
最近在使用erlang做游戏服务器,而字符串在服务器编程中的地位是十分重要的,于是便想仔细研究下字符编码,以及erlang下的字符串处理.先从Unicode开始吧.... [Unicode] Unic ...