一步一步教你写一个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 相关文章推荐
Flash对联广告的关闭按钮讨论
Jan 30 Javascript
JavaScript经典效果集锦
Jul 06 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
Dec 28 Javascript
js输出阴历、阳历、年份、月份、周示例代码
Jan 29 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
Jan 12 Javascript
jQuery EasyUI提交表单验证
Jul 19 Javascript
CSS3 media queries结合jQuery实现响应式导航
Sep 30 Javascript
es6学习笔记之Async函数的使用示例
May 11 Javascript
vue将时间戳转换成自定义时间格式的方法
Mar 02 Javascript
webpack 打包压缩js和css的方法示例
Mar 20 Javascript
详解vue.js移动端配置flexible.js及注意事项
Apr 10 Javascript
详谈Object.defineProperty 及实现数据双向绑定
Jul 18 Javascript
动态样式类封装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中使用与Perl兼容的正则表达式
2006/11/26 PHP
PHP去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php UBB 解析实现代码
2011/11/27 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
详解Python中的变量及其命名和打印
2016/03/11 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
机械工程系毕业生求职信
2013/09/27 职场文书
加工操作管理制度
2014/01/19 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
员工旷工检讨书
2015/08/15 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js