做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQuery看成一个类,那么就相当于给jQuery类本身添加方法。第二种是对象扩展的方式开发插件,即jQuery对象添加方法。

类扩展的插件

类扩展的插件开发最直接的理解就是给jQuery类添加类方法,可以理解为添加静态方法。典型的例子就是$.AJAX()这个函数,将函数定义于jQuery的命名空间中。关于类扩展的插件开发可以采用如下几种形式进行扩展:

 1.添加全局函数

  1. $.ltrim = function( str ) {
  2. return str.replace( /^\s+/, "" );
  3. };

  调用方式

  1. var str=" 去除左空格 ";
  2. console.log("去除前:"+str.length+"去除后:"+$.ltrim(str).length);

 2.添加多个全局函数

  1. $.ltrim = function( str ) {
  2. return str.replace( /^\s+/, "" );
  3. };
  4.  
  5. $.rtrim = function( str ) {
  6. return str.replace( /\s+$/, "" );
  7. };

 上面那种如果你写的全局函数比较少的情况下使用挺好,如果多的话建议使用 使用$.extend(object)

  1. $.extend({
  2. ltrim:function( str ) {
  3. return str.replace( /^\s+/, "" );
  4. },
  5. rtrim:function( str ) {
  6. return str.replace( /\s+$/, "" );
  7. }
  8. });

 3.独立的命名空间

虽然在jQuery命名空间中,我们禁止使用了大量的javaScript函数名和变量名。但是仍然不可避免某些函数或变量名将于其他jQuery插件冲突,因此我们习惯将一些方法封装到另一个自定义的命名空间。

  1. $.myPlugin={
  2. ltrim:function( str ) {
  3. return str.replace( /^\s+/, "" );
  4. },
  5. rtrim:function( str ) {
  6. return str.replace( /\s+$/, "" );
  7. }
  8. };

使用独立的插件名,可以避免命名空间内函数的冲突,调用方式:

  1. var str=" 去除左空格 ";
  2. console.log("调用前:"+str.length+"调用后:"+$.myPlugin.ltrim(str).length);

对象扩展的插件

1.添加一个对象扩展方法

  1. $.fn.changeColor= function() {
  2. this.css( "color", "red" );
  3. };
  4. $.fn.changeFont= function() {
  5. this.css( "font-size", "24px" );
  6. };

  调用方式:

  1. $(function () {
  2. $("a").showColor();
      $("div").changeFont();
  3. });

 2.添加多个对象扩展方法

  1. (function($){
  2. $.fn.changeColor= function() {
  3. this.css( "color", "red" );
  4. };
  5. $.fn.changeFont=function() {
  6. this.css( "font-size", "24px" );
  7. };
  8. })(jQuery);

  兼容写法(防止前面的函数漏写了;):

  1. ;(function($){
  2. $.fn.changeColor= function() {
  3. this.css( "color", "red" );
  4. };
  5. $.fn.changeFont=function() {
  6. this.css( "font-size", "24px" );
  7. };
  8. })(jQuery);

   上面都定义了一个jQuery函数,形参是$,函数定义完成之后,把jQuery这个实参传递进去.立即调用执行。这样的好处是,我们在写jQuery插件时,也可以使用$这个别名,而不会与prototype引起冲突.

3. 使用$.fn.extend(object)

题外话,查看jQuery源码(版本1.11.1)可以看到:

  1. jQuery.fn = jQuery.prototype = {
  2. // The current version of jQuery being used
  3. jquery: version,
  4. constructor: jQuery,
  5. ......................
  6. },

jQuery是一个封装得非常好的类,比如语句$("a") 会生成一个 jQuery类的实例。jQuery.fn.extend(object)实际上是对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。

  1. $.fn.extend({
  2. changeColor:function() {
  3. this.css( "color", "red" );
  4. },
  5. changeFont:function() {
  6. this.css( "font-size", "24px" );
  7. }
  8. });

 介绍了基本是关于对象扩展的基础的用法,下面开发一个简单的类似于代码高亮的功能,如下:

  1. (function($) {
  2. $.fn.highlight = function(options) {
  3. //插件参数的可控制性,外界可以修改默认参数
  4. var defaults=$.extend($.fn.highlight.defaults, options );
  5. //遍历函数,然后根据参数改变样式
  6. return this.each(function() {
  7. var elem = $( this );
  8. var markup = elem.html();
  9. markup = $.fn.highlight.format( markup );
  10. elem.html(markup);
  11. elem.css({
  12. color: defaults.color,
  13. fontSize:defaults.fontSize,
  14. backgroundColor: defaults.backgroundColor
  15. });
  16. });
  17. };
  18. //参数默认值
  19. $.fn.highlight.defaults={
  20. color: "#556b2f",
  21. backgroundColor:"white",
  22. fontSize: "48px"
  23. };
  24. //格式化字体
  25. $.fn.highlight.format = function( txt ) {
  26. return "<strong>" + txt + "</strong>";
  27. };
  28. })(jQuery);
  29.  
  30. $(function () {
  31. //调用插件
  32. $("a").highlight({color:"red",fontSize:"24px"});
  33. });

 小结

jQuery这两种插件开发的使用,需要根据开发过程中的具体情况而定,第一种类扩展的方法类似于C#添加一个静态方法,第二种对象扩展主要是根据自己的实际业务而确定的,你的网站有些地方常用的功能肯定可以自己写成一个插件,比如说图片的查看,侧边栏的点击,有的时候你同样可以研究网上别人写的插件,也可以学到不少东西.

jQuery中开发插件的两种方式(附Demo)的更多相关文章

  1. jQuery中开发插件的两种方式

    jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...

  2. jQuery开发插件的两种方式

    最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验 ...

  3. web.config文件中配置数据库连接的两种方式

    web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报    分类: 数据库(74)  在网站开发 ...

  4. LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...

  5. Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...

  6. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  7. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  8. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  9. 实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

    使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程 ...

随机推荐

  1. 洛谷P3605 [USACO17JAN] Promotion Counting 晋升者计数 [线段树合并]

    题目传送门 Promotion Counting 题目描述 The cows have once again tried to form a startup company, failing to r ...

  2. 【知了堂学习笔记】java 底层容易忽略的知识点

    1. java中的关键字 提到关键字,最主要的就是不能用关键字作为标识符,值得注意的有以下几点. ①其中goto与const在java中没有定义,但是也是关键字.这个基本用不到,但是应该有个认知. ② ...

  3. Python并发编程系列之多线程

    1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说Python中线程的用法.实际上,程序的运行都是以线程为基本单位的,每一个进程中都至少有一个线程(主线程),线程又可以创建子线程 ...

  4. 美团 R 语言数据运营实战

    一.引言 近年来,随着分布式数据处理技术的不断革新,Hive.Spark.Kylin.Impala.Presto 等工具不断推陈出新,对大数据集合的计算和存储成为现实,数据仓库/商业分析部门日益成为各 ...

  5. 再谈应用环境下的TIME_WAIT和CLOSE_WAIT

    昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有 ...

  6. HNOI2018 两天扫雷训练营

    Day -1 不知道干什么 学了下插头DP,随意看了几道题 Day 0 还是不知道干什么 打了一天的模板,1700多行.... 随意学了下回文树 Day 1 上午:各种丢人(好像没人注意) 电脑一开就 ...

  7. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp

    E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...

  8. UploadFileUtil

    package cn.tz.util.file; import java.io.File; import java.io.FileOutputStream; import java.io.InputS ...

  9. Lucene_索引(域)的查询

    package cn.tz.lucene; import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.ap ...

  10. cloc 统计代码行数工具

    cloc 统计代码行数工具 官网地址:http://cloc.sourceforge.net/ 下载完成后 会生成一个.exe文件 需要修改文件名为 cloc.exe 然后把这个文件拷贝到需要统计的根 ...