如何编写自己的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插件的更多相关文章

  1. (翻译)编写属于你的jQuery插件

    Writing Your Own jQuery Plugins 原文地址:http://blog.teamtreehouse.com/writing-your-own-jquery-plugins j ...

  2. 教你开发jQuery插件(转)

    教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文: ...

  3. jQuery插件手把手教会(二)

    上次我们将到了简单的jQuery插件,这次我们继续: 面向对象的插件开发 为什么要有面向对象的思维,因为如果不这样,你可能需要一个方法的时候就去定义一个function,当需要另外一个方法的时候,再去 ...

  4. 【转】教你开发jQuery插件

    阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文:http://www.cnblo ...

  5. 开发JQuery插件(转)

    教你开发jQuery插件(转)   阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...

  6. jquery插件与扩展一

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  7. 教你开发jQuery插件

    jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践. 根据<jQuery高级编程&g ...

  8. jQuery插件编写及链式编程模型小结

    JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...

  9. 【jQuery基础学习】08 编写自定义jQuery插件

    目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...

随机推荐

  1. JavaScript二(第一个js程序)

    一.<script>xxxx</script>标签解析 1.charset :可选,表示通过src属性指定的字符集,由于大多数浏览器忽略它,所以很少有人用它2.defer:可选 ...

  2. SVN mime-type 笔记

    背景: 1.最近使用执行svn diff的时候发现有些文本文件无法显示: 2.浏览器会通过判断获取文件的 MIME 类型, 调用不同的客户端程序或使用不同的方式来执行.如果文件的 MIME 缺失或者有 ...

  3. java面试第三天

    类和对象: 类:主观抽象,是对象的模板,可以实例化对象----具有相同属性和行为的对象的集合. 习惯上类的定义格式: package xxx; import xxx; public class Xxx ...

  4. 36个Android开发常用代码片段

    //36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...

  5. ios 的 desciption

    前段时间,终于将 ipa 文件打包完毕,上传appStore ,最后被打回,是因为 敏感的调用设备功能没有写描述. 有两种解决方式: A.直接修改 info.plist 文件 1.设置启动图标(CFB ...

  6. logging日志管理--将日志打印在屏幕上

    # -*- coding: cp936 -*- # test.py #http://blog.chinaunix.net/uid-27571599-id-3492860.html #logging日志 ...

  7. sql优化经历(转存+记录)

    sql优化经历 补充:看到这么多朋友对sql优化感兴趣,我又重新补充了下文章的内容,将更多关于sql优化的知识分享出来, 喜欢这篇文章的朋友给个赞吧,哈哈,欢迎交流,共同进步. 2015-4-30补充 ...

  8. 【laravel5.4】git上clone项目到本地,配置和运行 项目报错:../vendor/aotuload.php不存在

    1.一般我们直接使用git clone 将git的项目克隆下来,在本地git库和云上git库建立关联关系 2.vendor[扩展]文件夹是不会上传的,那么下载下来直接运行项目,会报错: D:phpSt ...

  9. coding云进行git push报:permission denied

    1.原因可能是 登录其他的git 项目,本地缓存了其他用户的 用户名和密码 认证信息,导致一直权限不通过 解决: git remote add origin http://yourname:passw ...

  10. Linux下PHP5.5编译参数详解

    一.配置参数 ./configure --prefix=/data/app/php --with-config-file-path=/etc --with-mysql=/usr\ --with-mys ...