一步一步教你写一个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将NodeList作为Array数组处理的方法
Jul 09 Javascript
Javascript面向对象编程(二) 构造函数的继承
Aug 28 Javascript
自定义jQuery选项卡插件实例
Mar 27 Javascript
javascript操作ul中li的方法
May 14 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
Feb 25 Javascript
AngularJs 常用的过滤器
May 15 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
jquery 键盘事件的使用方法详解
Sep 13 jQuery
JS页面获取 session 值,作用域和闭包学习笔记
Oct 16 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 Javascript
Vue绑定用户接口实现代码示例
Nov 04 Javascript
Vue 列表页带参数进详情页的操作(router-link)
Nov 13 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循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
php类自动加载器实现方法
2015/07/28 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python exit出错原因整理
2020/08/31 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
师范毕业生自我鉴定
2014/01/15 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
导师推荐信范文
2014/05/09 职场文书
新课培训心得体会
2014/09/03 职场文书
2014年派出所工作总结
2014/11/21 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Python机器学习之基础概述
2021/05/19 Python
Java 多线程并发FutureTask
2022/06/28 Java/Android