一步一步教你写一个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中的apply()方法和call()方法使用介绍
Jul 25 Javascript
javascript错误的认识不用关心内存管理
Dec 15 Javascript
中文字符串截取的js函数代码
Apr 17 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
浅析JSONP技术原理及实现
Jun 08 Javascript
JS验证图片格式和大小并预览的简单实例
Oct 11 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
Oct 29 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
Vue.js中的图片引用路径的方式
Jul 28 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
Dec 23 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 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
Protoss兵种介绍
2020/03/14 星际争霸
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
js格式化时间的方法
2015/12/18 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
vue模块拖拽实现示例代码
2019/03/09 Javascript
Python 正则表达式(转义问题)
2014/12/15 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
Python是怎样处理json模块的
2020/07/16 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
护士长竞聘书
2014/03/31 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android