jQuery中开发插件的两种方式(附Demo)

简介:

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

类扩展的插件

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

 1.添加全局函数

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

  调用方式

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

 2.添加多个全局函数

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

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

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

 3.独立的命名空间

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

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

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

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

对象扩展的插件

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

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

  调用方式:

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

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

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

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

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

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

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

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

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

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

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

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

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

 小结

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

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/3950178.html,如需转载请自行联系原作者

相关文章
|
9月前
|
关系型数据库 MySQL Docker
利用docker 开发 信息系统,python + mysql + flask + jquery
利用docker 开发 信息系统,python + mysql + flask + jquery
96 2
|
4月前
|
JavaScript
jQuery图片延迟加载插件jQuery.lazyload
jQuery图片延迟加载插件jQuery.lazyload
|
3月前
|
设计模式 JavaScript 前端开发
必知的技术知识:jQuery插件开发精品教程,让你的jQuery提升一个台阶
必知的技术知识:jQuery插件开发精品教程,让你的jQuery提升一个台阶
44 1
|
1月前
|
JavaScript 前端开发 数据安全/隐私保护
Validform jQuery插件详解
【8月更文挑战第21天】
|
3月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
3月前
|
JavaScript Perl PHP
一篇文章讲明白jQuery插件之jqueryeditableplugin
一篇文章讲明白jQuery插件之jqueryeditableplugin
24 0
|
4月前
|
前端开发 JavaScript PHP
【PHP开发专栏】jQuery与PHP实现Ajax通信
【4月更文挑战第30天】本文介绍了使用jQuery和PHP实现Ajax通信的步骤。首先,讲解了Ajax的基础和jQuery简化Ajax操作的概念。接着,展示了如何使用jQuery的`$.get()`、`$.post()`和`$.ajax()`方法发送GET和POST请求,以及如何控制请求细节。在PHP端,讨论了接收和响应Ajax请求的方法,包括处理数据、设置响应类型和错误处理。结合jQuery与PHP,开发者能实现高效、无缝的异步数据传输,提升Web应用的用户体验。
94 1
|
4月前
|
JavaScript 数据可视化 前端开发
jQuery-JS插件-第9次课-使用插件让领导对你刮目相看-附案例作业
jQuery-JS插件-第9次课-使用插件让领导对你刮目相看-附案例作业
47 0
|
4月前
|
JavaScript 前端开发 安全
jQuery 第十一章(表单验证插件推荐)
jQuery 第十一章(表单验证插件推荐)
88 1
|
4月前
|
JavaScript 前端开发
开发jQuery插件这些就够了
开发jQuery插件这些就够了
51 0