编写自己的jquery插件
如何编写自己的jquery插件
Jquery的插件主要分为三类:
、封装对象方法的插件:大部分插件都是封装对象的插件
、封装全局函数的插件:将独立的函数添加到jquery的命名空间之下。Jquery.ajax()和jquery.trim()就是jquery内部作为全局函数的插件添加到内核上去的。
、选择器插件:扩充自己喜欢的一些选择器。 编写Jquery插件的基本要点:
、一般命名的时候最好是按照jquery.[插件名].js命名。
、所有的对象都应当附加到jquery.fn对象上,所有的全局函数应该附加到jquery对象本身上
、通过this.each()来便利对象,这里的this指向的是当前选择器通过选择器获取的jquery对象
、所有的方法或者函数插件都要以分号结尾,否则压缩的话就会出现问题,有时候甚至要在头部也要加上“;”,以免不规范的代码给写的插件带来影响。
插件应当返回一个jquery对象,以便可以进行链式操作,除非你是要返回某个特定类型的参数,比如字符串和数组。
要注意$和jquery两个符号的冲入,可以利用闭包这种技术来回避这个问题。 允许使用内部函数,而且,这些内部函数可以访问他们所在的外部函数中声明的局部变量参数和声明的其他的内部函数,当其中一个这样的内部函数在包含他们的外部函数之外被调用时,就会形成闭包。
“闭包”是一个很复杂的概念,对于编写jquery插件其实是有一个模板的,这个模板中就有用到闭包的概念。 常见的jquery插件的都是有如下的格式的:
;(function($){
$.fn.yourName = function(options){ //各种属性、参数
}
var options = $.extend(defaults, options);//定义参数
this.each(function(){
//插件实现代码
});
};
})(jQuery);
注解:
()、“;(function($){ })(jQuery);”使用了匿名函数,表示在方法体内的”$”表示的就是”jquery”,为了有更好的兼容性,所以在前面添加一个分号
,这里的$符号是作为匿名函数的形参
()、$.extend(defaults, options);表示的是如果options中的参数总是有值的话,那么options中的值将会代替defaults中的值。举个例子来说:
Var setting={validate:true,limit:,name:foo};
Var options={validate:fasle,name:tom};
Var newoptions=$.extend(setting,options);
那结果就是newoptions={validate:false,limit:,name:tom}.
所以Jquery.extend()(或者是$.extend())经常来设置插件的一些默认的参数。
还有就是$.extend()用来扩展方法,和jquery.fn.extend()一样都是可以的,他们的区别在于:前者不使用jquery的方法,而后者使用了jquery的方法,就像 addClass(),remove()等。所以可想而知大部分的现有插件都是jquery.fn.extend()进行扩展的。 function foo(options){
options=jquery.extend({
Name:“bar”,
Length:,
dataType:”xml”
},options);
};
如果options参数传入的值为空,那么就可以使用默认设置的值。 例子:
;(function($)){
$.fn.extend({
“functionname”:function(options){//某个方法名
Options=$.extend({
odd:”odd”,
even:”even”
},options);
//可以通过options.元素名称来获取元素之,如options.odd
//some codes
$(“.table”).addClass(“”);//为某个元素添加样式等等
}
//一个方法结束
//另一个方法 this.cleartb = function() {//同时你也可以这么写,这里cleartb就是方法的名称 $('#emed_tb01').remove();//方法要做的事情 }
});
} 那我们在使用的时候就可以:
$(“#id_”).cleartb();//选中id为“id_”的元素执行上面插件中的cleartb的方法。 下面给出一个完整的插件的例子供参考:这个插件是一个消息提示的插件, ;(function($){
$.fn.manhuaTip = function(options) {//扩展函数manhuaTip
var defaults = {//默认值
Event : "click",
timeOut :
};
var options = $.extend(defaults,options);//以传参覆盖
var $tip = $(this);//选定操作的jquery元素为当前选中的元素
$tip.live(options.Event,function(e){
var type = $(this).attr('ty');
var msg = $(this).attr('msg');
var tipHtml = '';
if (type =='loading'){
tipHtml = '<img alt="" src="../images/loading.gif">'+(msg ? msg : '正在提交您的请求,请稍后...');
} else if (type =='notice'){
tipHtml = '<span class="gtl_ico_hits"></span>'+msg
} else if (type =='error'){
tipHtml = '<span class="gtl_ico_fail"></span>'+msg
} else if (type =='succ'){
tipHtml = '<span class="gtl_ico_succ"></span>'+msg
}
if ($('.msgbox_layer_wrap')) { $('.msgbox_layer_wrap').remove();
}
if (st){
clearTimeout(st);
}
$("body").prepend("<div class='msgbox_layer_wrap'><span id='mode_tips_v2' style='z-index: 10000;' class='msgbox_layer'><span class='gtl_ico_clear'></span>"+tipHtml+"<span class='gtl_end'></span></span></div>");
$(".msgbox_layer_wrap").show();
var st = setTimeout(function (){
$(".msgbox_layer_wrap").hide();
clearTimeout(st);
},options.timeOut);
});
} })(jQuery)
编写自己的jquery插件的更多相关文章
- (翻译)编写属于你的jQuery插件
Writing Your Own jQuery Plugins 原文地址:http://blog.teamtreehouse.com/writing-your-own-jquery-plugins j ...
- 教你开发jQuery插件(转)
教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文: ...
- jQuery插件手把手教会(二)
上次我们将到了简单的jQuery插件,这次我们继续: 面向对象的插件开发 为什么要有面向对象的思维,因为如果不这样,你可能需要一个方法的时候就去定义一个function,当需要另外一个方法的时候,再去 ...
- 【转】教你开发jQuery插件
阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文:http://www.cnblo ...
- 开发JQuery插件(转)
教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...
- jquery插件与扩展一
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- 教你开发jQuery插件
jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践. 根据<jQuery高级编程&g ...
- jQuery插件编写及链式编程模型小结
JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...
- 【jQuery基础学习】08 编写自定义jQuery插件
目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...
随机推荐
- const char * 转换为char*
可以用const_cast const char* aa = "this is a const string."; char* bb = const_cast< ...
- C#.NET常见问题(FAQ)-无法直接启动带有类库输出类型的项目怎么办
我把Driver.cs文件去掉了一行注释,发现报错 右击这个解决方案,选择属性,然后再启动项目中改成MySample 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http:// ...
- 【线段树】HDU 3397 Sequence operation 区间合并
操作 Change operations: 0 a b change all characters into '0's in [a , b] 1 a b change all characters i ...
- Java从零开始学十三(封装)
一.什么是封装,为什么要封装 对面向对象而言:封装就是将方法和属性包装到一个程序单元中,并且这个单元以类的形式实现. 简单讲:封闭就是将属性私有化,提供公有方法来访问私有属性 封装的作用: 封装反映和 ...
- hdu 4865 Peter's Hobby(概率dp)
http://acm.hdu.edu.cn/showproblem.php? pid=4865 大致题意:有三种天气和四种叶子状态.给出两个表,各自是每种天气下叶子呈现状态的概率和今天天气对明天天气的 ...
- 解决openssh TimeOut
SSH Client:ServerAliveInterval 100 SSH server:ClientAliveInterval 30TCPKeepAlive yes ClientAliveCoun ...
- win10开启IE11企业模式
.右击任务栏开始按钮,选择“运行”,打开运行框(或使用组合键Win+R打开运行) .输入gpedit.msc,进入“本地组策略编辑器”(注:该功能不支持Win8/Win8.1核心版.需要Win8/Wi ...
- 继承Spring AbstractRoutingDataSource实现路由切换
继承Spring AbstractRoutingDataSource实现路由切换 原创 2016年05月11日 16:50:08 标签: mybatis / AbstractRoutingDataS ...
- java 调整jvm堆大小上限
针对单个类,eclipse中调整jvm的运行参数,加上这么一句: -Xmx80m 即可把堆上限调整到80m. 关键字: BEA JRockit
- Rational Rose 2003 逆向工程转换C++源代码成UML类图
主要介绍用户如何使用Rose的逆向工程生成UML模型,并用来进行C++代码的结构分析. Rational Rose可以支持标准C++和Visual C++的模型到代码的转换以及逆向工程.下面将详细地说 ...