一步一步教你写一个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 相关文章推荐
JQuery Ajax 跨域访问的解决方案
Mar 12 Javascript
最常用的12种设计模式小结
Aug 09 Javascript
基于JQUERY的多级联动代码
Jan 24 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
Apr 16 Javascript
js实现拖拽 闭包函数详细介绍
Nov 25 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
Aug 26 Javascript
jquery插件pagination实现无刷新ajax分页
Sep 30 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
详解Vue中watch的详细用法
Nov 28 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
Sep 02 Javascript
【js设计模式】SOLID五大设计原则
Mar 24 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实现下载远程图片保存到本地的方法
2017/06/19 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
自己开发Dojo的建议框架
2008/09/24 Javascript
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python matplotlib库直方图绘制详解
2019/08/10 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
简单了解python数组的基本操作
2019/11/26 Python
python异常处理try except过程解析
2020/02/03 Python
python之语音识别speech模块
2020/09/09 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
英语专业推荐信
2013/11/16 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
舞蹈专业求职信
2014/06/13 职场文书
贷款委托书怎么写
2014/08/02 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
先进工作者推荐材料
2014/12/23 职场文书