The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

 

 
1、扩展jQuery自身之全局函数

jQuery.logError={/*log error*/}

jQuery.logWarning ={/*log warning */}

jQuery.logDebug ={/*log debug */}

使用:jQuery.logError();

上面三个可以写成

jQuery.log= {

    Error:function(){/*log error*/},

    Warning: function(){/*log warning */},

    Debug: function(){/*log debug*/}

}

使用:jQuery.log.Error();

jQuery.foobar={/*do foobar*/}

使用:jQuery.foobar();

以上的方法等同于使用 jQuery. extend ()

jQuery. extend = {

    log: {    Error:function(){/*log error*/},

    Warning: function(){/*log warning */},

    Debug: function(){/*log debug*/}

},

    foobar:function(){/*do foobar*/}

}

使用:

jQuery.log.Error();

jQuery.foobar();

2、添加实例方法,扩展jQuery.fn

jQuery.fn=jQuery.prototype

如:jQuery.fn.showMessage=function(){

alert(“message!!”)}

使用:$(“#div1”).showMessage();

l this是对当前jQuery对象的引用

l 使用each迭代当前对象

l 插件方法必须返回一个jQuery对象

Plug me:制作自己的插件

写一个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件.

为你的插件取一个名字,在这个例子里面我们叫它"foobar".
创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js
创建一个或更多的插件方法,使用继承jQuery对象的方式,如:
jQuery.fn.foobar = function() {
   // do something
};

可选的:创建一个用于帮助说明的函数,如:
jQuery.fooBar = {
   height: 5,
   calculateBar = function() { ... },
   checkDependencies = function() { ... }
};

你现在可以在你的插件中使用这些帮助函数了:

jQuery.fn.foobar = function() {
   // do something
   jQuery.foobar.checkDependencies(value);
   // do something else
};

可选的l:创建一个默认的初始参数配置,这些配置也可以由用户自行设定,如:
jQuery.fn.foobar = function(options) {
   var settings = {
                   value: 5,
                   name: "pete",
                   bar: 655
   };
   if(options) {
                   jQuery.extend(settings, options);
   }
};

现在可以无需做任何配置地使用插件了,默认的参数在此时生效:

$("...").foobar();

或者加入这些参数定义:

$("...").foobar({
   value: 123,
   bar: 9
});

如果你release你的插件, 你还应该提供一些例子和文档,大部分的插件都具备这些良好的参考文档.

现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自己的插件.

很多人试着控制所有的radio或者checkbox是否被选中,比如:

$("input[@type='checkbox']").each(function() {
               this.checked = true;
               // or, to uncheck
               this.checked = false;
               // or, to toggle
               this.checked = !this.checked;
});

无论何时候,当你的代码出现each时,你应该重写上面的代码来构造一个插件,很直接地:

$.fn.check = function() {
               return this.each(function() {
                               this.checked = true;
               });
};

这个插件现在可以这样用:

$("input[@type='checkbox']").check();

现在你应该还可以写出uncheck()和toggleCheck()了.但是先停一下,让我们的插件接收一些参数.

$.fn.check = function(mode) {
               var mode = mode || 'on'; // if mode is undefined, use 'on' as default
               return this.each(function() {
                               switch(mode) {
                               case 'on':
                                              this.checked = true;
                                              break;
                               case 'off':
                                              this.checked = false;
                                              break;
                               case 'toggle':
                                              this.checked = !this.checked;
                                              break;
                               }
               });
};

这里我们设置了默认的参数,所以将"on"参数省略也是可以的,当然也可以加上"on","off", 或 "toggle",如:

$("input[@type='checkbox']").check();
$("input[@type='checkbox']").check('on');
$("input[@type='checkbox']").check('off');
$("input[@type='checkbox']").check('toggle');

如果有多于一个的参数设置会稍稍有点复杂,在使用时如果只想设置第二个参数,则要在第一个参数位置写入null.

从上一章的tablesorter插件用法我们可以看到,既可以省略所有参数来使用或者通过一个 key/value 对来重新设置每个参数.

作为一个练习,你可以试着将第四章的功能重写为一个插件.这个插件的骨架应该是像这样的:

$.fn.rateMe = function(options) {
               var container = this; // instead of selecting a static container with $("#rating"), we now use the jQuery context
               var settings = {
                               url: "rate.php"
                               // put more defaults here
                               // remember to put a comma (",") after each pair, but not after the last one!
               };
               if(options) { // check if options are present before extending the settings
                               $.extend(settings, options);
               }              // ...
               // rest of the code
               // ...
               return this; // if possible, return "this" to not break the chain
});

posted on 2010-05-17 13:53 Eric_jiang 阅读(2957) 评论(1)  编辑  收藏 所属分类: JavaScript

Feedback

# re: 编写自己的Jquery插件 2011-05-27 17:26 Jquery插件
请不要发表任何与政治相关的内容  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: