jQuery插件开发全解析,类级别与对象级别开发
添加一个全局函数,我们只需如下定义:
1
2
3
|
jQuery.foo = function () { alert( 'This is a test. This is only a test.' ); }; |
添加多个全局函数,可采用如下定义:
1
2
3
4
5
6
7
|
jQuery.foo = function () { alert( 'This is a test. This is only a test.' ); }; jQuery.bar = function (param) { alert( 'This function takes a parameter, which is "' + param + '".' ); }; 调用时和一个函数的一样的:jQuery.foo();jQuery.bar();或者$.foo();$.bar( 'bar' ); |
1.3 使用jQuery.extend(object);
1
2
3
4
5
6
7
8
|
jQuery.extend({ foo: function () { alert( 'This is a test. This is only a test.' ); }, bar: function (param) { alert( 'This function takes a parameter, which is "' + param + '".' ); } }); |
1
2
3
4
5
6
7
8
9
10
11
|
jQuery.myPlugin = { foo: function () { alert( 'This is a test. This is only a test.' ); }, bar: function (param) { alert( 'This function takes a parameter, which is "' + param + '".' ); } }; 采用命名空间的函数仍然是全局函数,调用时采用的方法: $.myPlugin.foo(); $.myPlugin.bar( 'baz' ); |
1
2
3
4
5
6
7
|
( function ($){ $.fn.extend({ pluginName: function (opt,callback){ // Our plugin implementation code goes here. } }) })(jQuery); |
形式2:
1
2
3
4
5
|
( function ($) { $.fn.pluginName = function () { // Our plugin implementation code goes here. }; })(jQuery); |
1
2
3
4
5
|
$.fn.hilight = function () { // Our plugin implementation code goes here. }; 我们的插件通过这样被调用: $( '#myDiv' ).hilight(); |
2.2 接受options参数以控制插件的行为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// plugin definition $.fn.hilight = function (options) { var defaults = { foreground: 'red' , background: 'yellow' }; // Extend our default options with those provided. var opts = $.extend(defaults, options); // Our plugin implementation code goes here. }; 我们的插件可以这样被调用: $( '#myDiv' ).hilight({ foreground: 'blue' }); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// plugin definition $.fn.hilight = function (options) { // Extend our default options with those provided. // Note that the first arg to extend is an empty object - // this is to keep from overriding our "defaults" object. var opts = $.extend({}, $.fn.hilight.defaults, options); // Our plugin implementation code goes here. }; // plugin defaults - added as a property on our plugin function $.fn.hilight.defaults = { foreground: 'red' , background: 'yellow' }; 现在使用者可以包含像这样的一行在他们的脚本里: //这个只需要调用一次,且不一定要在ready块中调用 $.fn.hilight.defaults.foreground = 'blue' ; 接下来我们可以像这样使用插件的方法,结果它设置蓝色的前景色: $( '#myDiv' ).hilight(); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// plugin definition $.fn.hilight = function (options) { // iterate and reformat each matched element return this .each( function () { var $ this = $( this ); // ... var markup = $ this .html(); // call our format function markup = $.fn.hilight.format(markup); $ this .html(markup); }); }; // define our format function $.fn.hilight.format = function (txt) { return '<strong>' + txt + '</strong>' ; }; |
考虑到这个篇文章中我们建立的无用的插件,你也许想知道究竟什么时候这些会有用。一个真实的例子是Cycle插件.这个Cycle插件是一个滑动显示插件,他能支持许多内部变换作用到滚动,滑动,渐变消失等。但是实际上,没有办法定义也许会应用到滑动变化上每种类型的效果。那是这种扩展性有用的地方。 Cycle插件对使用者暴露"transitions"对象,使他们添加自己变换定义。插件中定义就像这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
( function ($) { // plugin definition $.fn.hilight = function (options) { debug( this ); // ... }; // private function for debugging function debug($obj) { if (window.console && window.console.log) window.console.log( 'hilight selection count: ' + $obj.size()); }; // ... })(jQuery); |
1
2
3
4
5
6
7
8
9
|
$.fn.hilight = function (options) { // ... // build main options before element iteration var opts = $.extend({}, $.fn.hilight.defaults, options); return this .each( function () { var $ this = $( this ); // build element specific options var o = $.meta ? $.extend({}, opts, $ this .data()) : opts; //... |
1
2
3
4
5
6
7
8
9
10
11
|
< div . = "hilight { background: 'red', foreground: 'white' }" > Have a nice day! </ div > < div . = "hilight { foreground: 'orange' }" > Have a nice day! </ div > < div . = "hilight { background: 'green' }" > Have a nice day! </ div > 现在我们能高亮哪些div仅使用一行脚本: $('.hilight').hilight(); |
2.7 整合
下面使我们的例子完成后的代码:
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
34
35
36
37
38
39
|
// 创建一个闭包 ( function ($) { // 插件的定义 $.fn.hilight = function (options) { debug( this ); // build main options before element iteration var opts = $.extend({}, $.fn.hilight.defaults, options); // iterate and reformat each matched element return this .each( function () { $ this = $( this ); // build element specific options var o = $.meta ? $.extend({}, opts, $ this .data()) : opts; // update element styles $ this .css({ backgroundColor: o.background, color: o.foreground }); var markup = $ this .html(); // call our format function markup = $.fn.hilight.format(markup); $ this .html(markup); }); }; // 私有函数:debugging function debug($obj) { if (window.console && window.console.log) window.console.log( 'hilight selection count: ' + $obj.size()); }; // 定义暴露format函数 $.fn.hilight.format = function (txt) { return '<strong>' + txt + '</strong>' ; }; // 插件的defaults $.fn.hilight.defaults = { foreground: 'red' , background: 'yellow' }; // 闭包结束 })(jQuery); |
jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法。
jQuery插件开发全解析,类级别与对象级别开发的更多相关文章
- jQuery插件开发全解析
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- (转)jQuery插件开发全解析
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- jQuery插件开发全解析[转]
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- 转:jQuery插件开发全解析
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- jQuery插件开发全解析<转>
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- jQuery 插件开发全解析
jQuery插件的开发包含两种: 一种是类级别的插件开发,即给jQuery加入新的全局函数,相当于给jQuery类本身加入方法.jQuery 的全局函数就是属于jQuery命名空间的函数,还有一种是对 ...
- jQuery插件开发——全屏切换插件
这个插件包含三个部分:HTML结构.CSS代码和JS代码. HTML结构是固定的,结构如下: <!--全屏滚动--> <div class="fullpage-contai ...
- jQuery Ajax 全解析
转自:http://www.cnblogs.com/qleelulu/archive/2008/04/21/1163021.html 本文地址: jQuery Ajax 全解析 本文作者:QLeelu ...
- jQuery Ajax 全解析(转载)
本文地址: jQuery Ajax 全解析 本文作者:QLeelulu 转载请标明出处! jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写Java ...
随机推荐
- android 数据库操作
做android的数据库方面用的很少,所以用的时候记录下来,下次碰到直接copy,一下代码是最基本的实现: 首先是继承helper类: package com.create.rycreateim.db ...
- 用canvas画时钟
效果图在博客首页上. html: <canvas id="canvas" >Your browser does not support canvas</canva ...
- 实现gabor filter的滤波
实现gabor filter的滤波 图像纹理对于航空遥感图片.织物图案.复杂自然风景和动植物都适合.这里我采用遥感图片.织物图案和钢铁表面来做,并和canny图片进行一定的对比. ...
- Spring声明式事务管理与配置详解
转载:http://www.cnblogs.com/hellojava/archive/2012/11/21/2780694.html 1.Spring声明式事务配置的五种方式 前段时间对Spring ...
- MySQL常用操作总结
MySQL常用操作 前提条件:已安装MySQL. 学习目标:用一条sql语句写出A和B的剩余数量 AA表 BB表 以上为一道面试题,接下来由这道面试题来回顾一些数据库的基本操作. 登录MySQL su ...
- C#代码开发规范
Wrod下载 C#代码开发规范 文件状态: [√] 草稿 [ ] 正式 [ ] 修改 文件标识: 当前版本: 1.1 作 者: Empty 联系电话: 最后更新: ...
- phpcms 05
所谓的异步加载,也就是两个线程同时执行一个任务,比如一个加载文字,一个加载图片,这样子可以先看到文字 footer,html包含尾部文件 {template "content",& ...
- Android:onNewIntent()触发机制及注意事项
一.onNewIntent() 在IntentActivity中重写下列方法:onCreate onStart onRestart onResume onPause onStop onDestro ...
- Mysql--学习笔记(==》简单查询三)
-- 查看查询数据显示SELECT * FROM student; -- 显示一部分信息的查询SELECT sname 姓名,sscore 成绩,saddress 家庭住址 FROM student; ...
- 2016年11月15日 星期二 --出埃及记 Exodus 20:6
2016年11月15日 星期二 --出埃及记 Exodus 20:6 but showing love to a thousand of those who love me and keep my c ...