一步一步教你写一个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 相关文章推荐
JavaScript 比较时间大小的代码
Apr 24 Javascript
jQuery中jqGrid分页实现代码
Nov 04 Javascript
jquery实现炫酷的叠加层自动切换特效
Feb 01 Javascript
js鼠标点击图片切换效果代码分享
Aug 26 Javascript
js实现五星评价功能
Mar 08 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
May 02 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 Javascript
深入理解es6块级作用域的使用
Mar 28 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
Sep 12 Javascript
详解Node.JS模块 process
Aug 31 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
FCKeditor添加自定义按钮
2008/03/27 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
linux下编译安装memcached服务
2014/08/03 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
python生成器的使用方法
2013/11/21 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
python实现名片管理器的示例代码
2019/12/17 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
python 读取二进制 显示图片案例
2020/04/24 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
财务部会计岗位职责
2015/02/03 职场文书
财务稽核岗位职责
2015/04/13 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
培根随笔读书笔记
2015/07/01 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python
MySQL创建管理子分区
2022/04/13 MySQL