加载中…
个人资料
代码学堂
代码学堂
  • 博客等级:
  • 博客积分:0
  • 博客访问:6,157
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

JQuery插件制作详细指南

(2017-07-09 13:23:19)
标签:

jquery

插件

分类: 我要学代码
转载请注明:代码学堂>web前端 jquery教程 > JQuery插件制作详细指南
JQuery Plugin插件,如果大家不明白什么是JQuery插件或都不清楚如何编写可以查看其官方的网站
好了,下面有一些我觉得想做一个好的插件必须应有的要求:
1、在JQuery命名空间下声明只声明一个单独的名称
2、接受options参数,以便控制插件的行为
3、暴露插件的默认设置 ,以便外面可以访问
4、适当地将子函数提供给外部访问调用
5、保持私有函数
6、支持元数据插件
下面将逐条地过一遍:
只声明一个单独的名称
这表明是一个单独的插件脚本。如果你的脚本包含多个插件或者是互补的插件(像$.fn.doSomething()和$.undoSomething()),那么你可以根据要求声明多个名称。但一般情况下,力争用单一的名称来维持插件现实的所有细节。
在本例中,我们将声明一个叫“hilight”的名称

代码如下:

// 插件的定义
$.fn.hilight = function( options ){
// 这里就是插件的实现代码了...
};
然后我们可以像这样调用它:
$("divTest").hilight();

接受一个options参数,以便控件插件的行为

代码如下:


$.fn.hilight = function(options){
var defaults = {
foreground : 'red',
background : 'yellow'
};
//Extends out defaults options with those privided 扩展我们默认的设置
$.extend(defaults,options);
};

而我们可以这样使用它:

代码如下:


$('#myDiv').hilight({
foreground: 'blue'
});

暴露插件的默认设置 ,以便外面可以访问
作为插件的提升和优化,我们应该将上面的代码暴露出来作为插件的默认设置。
这非常重要,这样做让使用插件的用户可以非常容易地用最少的代码重写或自定义该插件。然而这个我们可以借助JavaScript function对象的优势:

代码如下:


$.fn.hilight = function(options){
//Extend our default options with those provided
//Note that the first arg to extend is an empty object
//this is to keep from overriding our "defaults" object

var opts = $.extend({},$.fn.hilight.defaults,options);
}
$.fn.hilight.defaults = {
foreground : 'red',
background : 'yellow'
};

这里值得注意的是$.extend()第一个参数是一个空的对象,这样可以让我们重写插件的默认设置
用户可以像这样使用插件:

代码如下:


// override plugin default foreground color
$.fn.hilight.defaults.foreground = 'blue';
// ...
// invoke plugin using new defaults

$('.hilightDiv').hilight();
// ...
// override default by passing options to plugin method

$('#green').hilight({
foreground: 'green'
});

适当地将子函数提供给外部访问调用
这个例子延续前面的例子,你会发现有一个有趣的方法可以扩展你的插件(然后还可以让其他人扩展你的插件 :))。例如,我们在插件里声明了一个函数叫“format”用来高这显示文本,我们的插件实现代码可能是这样子的:

代码如下:


$.fn.hight = function(options){
//iterate and reformat each mached element
return this.each(function(){
var $this = $(this);
var markup = $this.html();
//call our format function
markup = $.fn.hilight.format(markup);
$this.html(markup);
});
};
//define our format function
$.fn.hilight.format = function(txt){
return '' + txt + '';
};

保持私有函数 
暴露插件有部分内容提供重写看上去似乎非常强大,但是你必须认真地考虑你的插件哪一部分是需要暴露出来的。一旦暴露出来,你就需要考虑这些变化点,一般情况下,如果你没有把握哪部分需要暴露出来,那么你可以不这样做。
那如何才能够定义更多的函数而不将其暴露出来呢?这个任务就交给闭包吧。为了证实,我们在插件中添加一个函数叫“debug”,这debug函数将会记录已选择的元素数量到FireBug控制台中。为了创建闭包,我们将插件定义的整部分都包装起来:

代码如下:


//create closure
(function($){
//plugin definition
$.fn.hilight = function(options){
debug(this);
};
//private function for debuggin
function debug($obj){
if(window.console && window.console.log){
window.console.log('hilight selection count :' + $obj.size());
}
}
//end of closure
})(jQuery);

这样“debug”方法就不能被闭包这外调用了

支持元数据插件
依赖于所写的插件类型,并支持元数据插件会使得其本身更加强大。个人来讲,我喜欢元素据插件,因为它能让你分离标签中重写插件的配置(这在写demo和示例时特别有用)。最重要的是,想现实它特别的容易!

代码如下:


$.fn.hilight = function(options){
//build main options before element interation
var opts = $.extend({},$.fn.hilight.defaults,options);
return this.each(function(){
var $this = $(this);
//build element specific options
var o = $.meta ? $.extend({},opts,$this.data()) : opts;
//一般句话,搞定支持元数据 功能
});
}

几行的变化完成了以下几件事:
1、检测元数据是否已经配置
2、如果已配置,将配置属性与额外的元数据进行扩展

代码如下:

  1.   
  2. <</span>div>  
  3. Have nice day!这是元数据  
  4. </</span>div>  
  5. <</span>div>  
  6. Have nice day!在标签中配置  
  7. </</span>div>  
  8. <</span>div>  
  9. Have nice day!  
  10. </</span>div>  

然后我们通过一句脚本就可以根据元数据配置分开地高亮显示这些div标签:

代码如下:


$('.hilight').hilight();

最后,将全部代码放在一起:

代码如下:
 

  1. // 
  2. //create closure 
  3. // 
  4. (function($){ 
  5. // 
  6. // plugin definition 
  7. // 
  8. $.fn.hilight function(options){ 
  9. debug(this); 
  10. //build main options before element iteration 
  11. var opts $.extend({}, $.fn.hilight.defaults, options); 
  12. //iterate and reformat each matched element 
  13. return this.each(function(){ 
  14. $this $(this); 
  15. //build element specific options 
  16. var $.meta ? $.extend({}, opts, $this.data()) opts; 
  17. //update element styles 
  18. $this.css({ 
  19. backgroundColor: o.background, 
  20. color: o.foreground 
  21. }); 
  22. var markup $this.html(); 
  23. //call our format function 
  24. }); 
  25. // 
  26. // private function for debugging 
  27. // 
  28. function debug($obj){ 
  29. if(window.console && window.console.log){ 
  30. window.console.log('hilight selection count: ' $obj.size()); 
  31. }; 
  32. // 
  33. // define and expose our format function 
  34. // 
  35. $.fn.hilight.format function(txt){ 
  36. return '' txt ''
  37. }; 
  38. // 
  39. // plugin defaults 
  40. // 
  41. $.fn.hilight.defaults 
  42. foreground 'red'
  43. background 'yellow' 
  44. }; 
  45. // 
  46. // end of clousure 
  47. // 
  48. })(jQuery); 
比较希望大家开发jquery plugin的时候可以在最后把方法开放出来
return {
method1: funcion() {},
method2: funcion() {}
}

这样我们在使用的时候就可以用如下方式调用
var plugin = $("").plugin();
plugin.mehtod1();
plugin.method2();

转载请注明:代码学堂>web前端 jquery教程 > JQuery插件制作详细指南

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有