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 ...
随机推荐
- AngularJS 实现的输入自动完成补充功能
1.首先需要引入:angucomplete.js第三方库 2.增加model : var app = angular.module('app', ["angucomplete"]) ...
- ACM题目————Find them, Catch them
Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...
- 杭电1009-FatMouse' Trade
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- PHP获取手机相关信息
该PHP操作类实现获取手机号手机头信息,取UA,取得手机类型,判断是否是opera,判断是否是m3gate,取得HA,取得手机IP 代码如下: <?php /** * @desc 手机操作类 获 ...
- 【算法】简单动态规划——三逆数的O(N^2)解法!
问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai,aj,ak为一个三逆数. 现在给定一个长度为N的数 ...
- SQL Server中常用的SQL语句
1.概述 名词 笛卡尔积.主键.外键 数据完整性 实体完整性:主属性不能为空值,例如选课表中学号和课程号不能为空 参照完整性:表中的外键取值为空或参照表中的主键 用户定义完整性:取值范围或非空限制,例 ...
- 2016CCPC东北地区大学生程序设计竞赛 1001 HDU5922
链接http://acm.hdu.edu.cn/showproblem.php?pid=5922 题意:最小生成树,但边的权值是连接两点的最小公倍数 解法:不要真的写最小生成树啦,只要其他点和第一点相 ...
- WPFの布局中Panel的选用
一.Canvas 这个容器能够对元素做准确的定位,但同时也是其创建的页面不够灵活. 二.StackPanel 最大的优点是:他会顺序的对他的子元素进行排列显示.(没有任何附加属性) 要注意的是:他有两 ...
- react学习
http://www.cnblogs.com/yunfeifei/ http://wiki.jikexueyuan.com/project/react-native/native-ui-compone ...
- 【Linux】用less查看日志文件
一般程序部署在Linux环境,查看日志时,一般用less满足大部分的需求. 列举.记录最常用的场景,代码以Tomcat日志文件catalna.out为例. > 直接查看文件 less catal ...