jQuery开发插件的两种方式
最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据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插件时,也可以使用$这个别名,而不会与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#添加一个静态方法,第二种对象扩展主要是根据自己的实际业务而确定的,你的网站有些地方常用的功能肯定可以自己写成一个插件,比如说图片的查看,侧边栏的点击,有的时候你同样可以研究网上别人写的插件,也可以学到不少东西.
jQuery开发插件的两种方式的更多相关文章
- jQuery中开发插件的两种方式
jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...
- jQuery中开发插件的两种方式(附Demo)
做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQu ...
- jQuery 实现图片放大两种方式
jQuery 实现图片放大两种方式 一.利用css样式表实现,多用于后台显示 1.这种比较简单,利用dom元素的hover实现样式切换 <style> img{ cursor: point ...
- eclipse里安装SVN插件的两种方式
eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse 里Help菜单的“Install New Software”,通过 ...
- Myeclipse8.5 svn插件安装两种方式
第一种方式:(亲测成功)第一步:准备插件包:site-1.6.18.zip解压该包里面有features和plugins文件夹,删除该包里面的xml结尾的文件. 第二:我的Myeclipse8.5安装 ...
- jQuery开发插件的两个方法 js 深浅拷贝
1.jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法.由全局函数来调用, 主要是用来拓展个全局函数 2.jQuery.fn.extend(object);为jQu ...
- 加载jquery主函数的两种方式
方式一: $(document).ready(fucntion){ var div1 = document.getElementById("div1"); alert(div1); ...
- jquery插件的两种形式
这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...
- jquery ajax提交表单数据的两种方式
http://www.kwstu.com/ArticleView/kwstu_201331316441313 貌似AJAX越来越火了,作为一个WEB程序开发者要是不会这个感觉就要落伍,甚至有可能在求职 ...
随机推荐
- Simple dc/dc converter increases available power in dual-voltage system
The schematic in Figure 1 shows a way to increase the power available from a current-limited 5V supp ...
- IPC low/medium/high density 什么意思?
http://wiki.altium.com/pages/viewpage.action?pageId=3080344 Land Pattern Information Density Level A ...
- Rob Pike 的 5 个编程原则
原则 1. 你没有办法预测每个程序的运行时间,瓶颈会出现在出乎意料的地方,所以在分析瓶颈原因之前,先不要盲目猜测. 原则 2. 测试(measure).在测试之前不要优化程序,即使在测试之后也要慎重, ...
- eclipse安装Run-Jetty-Run插件,修改实时生效
http://marketplace.eclipse.org/content/run-jetty-run 1.直接拖拽到eclipse安装(7/8/9版本都安装) 2.以调试的方式启动jetty( ...
- (转载)iPhone开发视频教程 Objective-C部分 (51课时)
感谢好人的无私贡献!来源:http://www.cnblogs.com/aimeng/p/3370012.html 第一.二章 OC基础语法 iPhone开发教程 第一章 OC基础语法 i ...
- EF 不允许启动新事务,因为有其他线程正在该会话中运行。
引起原因:在查询中提交了更改.如在遍历的时候,调用了savechanges(): 解决:把savechange()提到循环外. IOrderedQueryable<TOH ...
- [Todo] Redis相关学习
Redis与新浪 http://www.cnblogs.com/me115/p/3482783.html Redis对于多个CPU的机器,可以启动多实例. 可以看看这个(写的简单了) http://w ...
- CarbonData编译与安装
原文连接 http://xiguada.org/carbondata_compile/ CarbonData是啥? CarbonData is a fully indexed columnar and ...
- js实现可拉伸移动的div
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd&qu ...
- 【Python】【Nodejs】下载单张图片到本地,Python和Nodejs的比较
Python版本: # 下载单张图片到本地,看用时多少 import urllib.request import datetime starttime = datetime.datetime.now( ...