jQuery入门-制作自己的插件

发布时间:2020-02-01编辑:脚本学堂
写自己的jQuery插件非常容易,按照下面的原则来做,可以让其他人也容易地结合使用你的插件

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

  1. 为你的插件取一个名字,在这个例子里面我们叫它"foobar".
  2. 创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js
  3. 创建一个或更多的插件方法,使用继承jQuery对象的方式,如:
4. jQuery.fn.foobar = function() {
5.  // do something
};
  1. 可选的:创建一个用于帮助说明的函数,如:
7. jQuery.fooBar = {
8.  height: 5,
9.  calculateBar = function() { ... },
10. checkDependencies = function() { ... }
};
你现在可以在你的插件中使用这些帮助函数了:
jQuery.fn.foobar = function() {
 // do something
 jQuery.foobar.checkDependencies(value);
 // do something else
};
  1. 可选的l:创建一个默认的初始参数配置,这些配置也可以由用户自行设定,如:
12.jQuery.fn.foobar = function(options) {
13. var settings = {
14.         value: 5,
15.         name: "pete",
16.         bar: 655
17. };
18. if(options) {
19.         jQuery.extend(settings, options);
20. }
};
现在可以无需做任何配置地使用插件了,默认的参数在此时生效:
$("...").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;
});
注:在jQuery1.2及以上版本中,选择所有checkbox应该使用 input:checkbox , 因此以上代码第一行可写为:
$('input:checkbox').each(function() {
无论何时候,当你的代码出现each时,你应该重写上面的代码来构造一个插件,很直接地:
$.fn.check = function() {
        return this.each(function() {
               this.checked = true;
        });
};
这个插件现在可以这样用:
$('input:checkbox').check();
注:在jQuery1.2及以上版本中,选择所有checkbox应该使用 input:checkbox 原文为:$("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
});