一步一步教你写一个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 相关文章推荐
js中的escape及unescape函数的php实现代码
Sep 04 Javascript
Javascript 圆角div的实现代码
Oct 15 Javascript
25个优雅的jQuery Tooltip插件推荐
May 25 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
Feb 07 Javascript
jquery中get,post和ajax方法的使用小结
Feb 04 Javascript
JavaScript定时显示广告代码分享
Mar 02 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
JavaScript中最常见的三个面试题解析
Mar 04 Javascript
你可能不知道的JSON.stringify()详解
Aug 17 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 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
晶体管单管来复再生式收音机
2021/03/02 无线电
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
解放web程序员的输入验证
2006/10/06 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
细说webpack6 Babel的使用详解
2019/09/26 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
采购类个人求职的自我评价
2014/02/18 职场文书
青岛海底世界导游词
2015/02/11 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫