一步一步教你写一个jQuery的插件教程(Plugin)


Posted in Javascript onSeptember 03, 2009

jQuery 的plugin开发需要注意的事情,
1.       明确jQuery的命名空间只有一个。
2.       明白options参数用来控制plugin的行为。
3.       为默认的plugin设定提供公共的访问权限。
4.       为子函数提供公共的访问权限。
5.       私有的函数绝对是私有访问
6.       支持metadata plugin。
我将会在下面的例子中一个一个的说明上面这几个条件,做完这些事情后我们就会创建一个高亮显示text的简单插件。

1. 明确jQuery的命名空间只有一个

在我们的例子里,我们将会命名这个插件名字为hilight,

一步一步教你写一个jQuery的插件教程(Plugin)

也就是我们的plugin可以通过下面的方法来使用:

一步一步教你写一个jQuery的插件教程(Plugin)

为什么jQuery的plugin只有一个命名空间?可能是设计的要求,或者是这样的话可读性更强,亦或是为了面向对象的设计模式。

2.明白options参数来控制plugin的行为。

  让我们先为我们的hilight插件明确一下foreground和background的颜色。我们应该能够允许这两个option作为option对象传递给plugin的主函数。例如:

一步一步教你写一个jQuery的插件教程(Plugin)

现在插件能够设定如下的属性:

一步一步教你写一个jQuery的插件教程(Plugin)

3. 为默认的plugin设定提供公共的访问权限。

   我们这里可以改进一下,就是让上面的代码能够设置能够扩展。这样当使用这个插件的用户能够使用最少的代码重载我们的option。这也就是我们开始使用function对象的好处。

一步一步教你写一个jQuery的插件教程(Plugin)

现在用户可以在他们的script中使用一行代码来设置foreground属性:

一步一步教你写一个jQuery的插件教程(Plugin)

有了上面的代码我们就可以把某个DOM控件的foregrounf颜色设定为blue了。

一步一步教你写一个jQuery的插件教程(Plugin)

4. 为子函数提供公共的访问权限

   这个条款和上面的相仿,能很有趣的让你的Plugin有扩展功能。例如:在lilight的plugin中我们能够定义一个function是format,可以定义hilight的text的形式。我们的plugin代码将会显示如下:

一步一步教你写一个jQuery的插件教程(Plugin)

这里我们可以很容易支持另外的一个option对象来通过一个callback 函数来重载默认的formatting。那将会是另外一个不错的支持自定义的方式。

5. 私有的函数绝对是私有访问

   公开plugin的一些Option能够被自定义当然是个非常强大的功能。但是你需要考虑哪部分应该被公开,哪部分不应该通过外部访问,否则会破会你已经封装好的结果。

一步一步教你写一个jQuery的插件教程(Plugin)

  这里debug方法不能从外部访问,因为他在plugin的展现中属于私有的方法。

6.支持metadata plugin。

  使用Metadata Plugin需要看你的plugin是什么类型,可能它会使你的插件功能更加强大。个人来说,我比较喜欢metadata plugin是因为它能偶让我的plguin的option通过标记重载。

一步一步教你写一个jQuery的插件教程(Plugin)

  如果metadata plugin能够成功的封装到我们的插件,那么可以通过下面的标记来使用这个lilight插件。

一步一步教你写一个jQuery的插件教程(Plugin)

 最终代码如下:

// 
// create closure 
// 
(function($) { 
// 
// plugin definition 
// 
$.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); 
}); 
}; 
// 
// private function for debugging 
// 
function debug($obj) { 
if (window.console && window.console.log) 
window.console.log('hilight selection count: ' + $obj.size()); 
}; 
// 
// define and expose our format function 
// 
$.fn.hilight.format = function(txt) { 
return '<strong>' + txt + '</strong>'; 
}; 
// 
// plugin defaults 
// 
$.fn.hilight.defaults = { 
foreground: 'red', 
background: 'yellow' 
}; 
// 
// end of closure 
// 
})(jQuery);
Javascript 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
JavaScript中的事件处理
Jan 16 Javascript
javascript检测浏览器的缩放状态实现代码
Sep 28 Javascript
jquery实现不包含当前项的选择器实例
Jun 25 Javascript
jquery表单插件Autotab使用方法详解
Jun 24 Javascript
Vuex之理解Mutations的用法实例
Apr 19 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
Jun 10 Javascript
vue实现购物车列表
Jun 30 Javascript
vue+spring boot实现校验码功能
May 27 Vue.js
动态样式类封装JS代码
Sep 02 #Javascript
JS URL传中文参数引发的乱码问题
Sep 02 #Javascript
FF IE兼容性的修改小结
Sep 02 #Javascript
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 #Javascript
获取URL地址中的文件名和参数的javascript代码
Sep 02 #Javascript
Javascript 判断函数类型完美解决方案
Sep 02 #Javascript
javascript 控制 html元素 显示/隐藏实现代码
Sep 01 #Javascript
You might like
让你的PHP同时支持GIF、png、JPEG
2006/10/09 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
Python中import机制详解
2017/11/14 Python
python的常用模块之collections模块详解
2018/12/06 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Python中包的用法及安装
2020/02/11 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
如何解决安装python3.6.1失败
2020/07/01 Python
python 8种必备的gui库
2020/08/27 Python
python实现登录与注册系统
2020/11/30 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
幼儿园庆六一游园活动方案
2014/01/29 职场文书
学生生病请假条范文
2014/02/16 职场文书
服务员岗位职责
2015/02/03 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL