首页 技术 正文
技术 2022年11月15日
0 收藏 676 点赞 2,717 浏览 3495 个字

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

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

类扩展的插件

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

 1.添加全局函数

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

  调用方式

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

 2.添加多个全局函数

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

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

12345678 $.extend({    ltrim:function( str ) {      return str.replace( /^\s+/, "" );  },  rtrim:function( str ) {      return str.replace( /\s+$/, "" );  }  });

 3.独立的命名空间

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

12345678 $.myPlugin={      ltrim:function( str ) {       return str.replace( /^\s+/, "" );   },   rtrim:function( str ) {       return str.replace( /\s+$/, "" );   }};

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

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

对象扩展的插件

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

123456   $.fn.changeColor= function() {    this.css( "color", "red" );};   $.fn.changeFont= function() {    this.css( "font-size", "24px" );};

  调用方式:

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

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

12345678   (function($){      $.fn.changeColor= function() {    this.css( "color", "red" );};   $.fn.changeFont=function() {    this.css( "font-size", "24px" );};  })(jQuery);

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

12345678 ;(function($){      $.fn.changeColor= function() {    this.css( "color", "red" );};   $.fn.changeFont=function() {    this.css( "font-size", "24px" );};  })(jQuery);

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

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

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

123456 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类的实例可以使用这个“成员函数”。

12345678   $.fn.extend({  changeColor:function() {  this.css( "color", "red" );},changeFont:function() {    this.css( "font-size", "24px" );}});

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

123456789101112131415161718192021222324252627282930313233 (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#添加一个静态方法,第二种对象扩展主要是根据自己的实际业务而确定的,你的网站有些地方常用的功能肯定可以自己写成一个插件,比如说图片的查看,侧边栏的点击,有的时候你同样可以研究网上别人写的插件,也可以学到不少东西.

如果你觉得本文还不错,有所收获,给个推荐吧,多谢~

  

作者:FlyElephant
出处:http://www.cnblogs.com/xiaofeixiang

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,894