jQuery中文入门教程(7)

作者:Keel 来源:Keel blog 时间:2007-12-09 19:20:00 

Plug me:制作自己的插件

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

  1. 为你的插件取一个名字,在这个例子里面我们叫它"foobar".

  2. 创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js

  3. 创建一个或更多的插件方法,使用继承jQuery对象的方式,如:

    jQuery.fn.foobar = function() {
    // do something
    };
  4. 可选的:创建一个用于帮助说明的函数,如:

    jQuery.fooBar = {
    height: 5,
    calculateBar = function() { ... },
    checkDependencies = function() { ... }
    };

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

    jQuery.fn.foobar = function() {
    // do something
    jQuery.foobar.checkDependencies(value);
    // do something else
    };
  5. 可选的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
});

Next steps(下一步)

如果你想做更好的javascript开发,建议你使用一个叫 FireBug的firefox插件. 它提供了断点调试(比alert强多了)、观察DOM变化等很多漂亮的功能

如果你还有未解决的问题,或者新的想法与建议,你可以使用jQuery的邮件列表 jQuery mailing list.

关于这个指南的任何事情,你可以写mail给作者或者发表评论在他的日志:blog.

关于这个指南的翻译任何事情,你可以写mail给我或者发表评论在我的日志:blog.

还有什么...

大大感谢John Resig创造了这么好的library! 感谢jQuery community 为John提供了如此多的咖啡和其他的一切!


标签:jquery,教程,入门
0
投稿

猜你喜欢

  • mysql如何配置白名单访问

    2024-01-25 15:43:20
  • php中替换字符串函数strtr()和str_repalce()的用法与区别

    2023-11-17 06:12:53
  • Python正确重载运算符的方法示例详解

    2022-01-13 21:35:42
  • 戴尔是如何设计新官网首页的

    2008-07-08 19:02:00
  • 查询数据表中的记录(SELECT)

    2009-02-27 16:06:00
  • golang 并发安全Map以及分段锁的实现方法

    2024-04-28 10:45:44
  • postman传递当前时间戳实例详解

    2022-01-09 17:28:34
  • 详解MySQL双活同步复制四种解决方案

    2024-01-13 04:39:47
  • 最新CSS兼容方案

    2008-08-13 13:20:00
  • Go实现双向链表的示例代码

    2024-03-13 04:11:45
  • Oracle 数据库连接查询SQL语句

    2009-08-05 20:56:00
  • windows下mysql 5.7版本中修改编码为utf-8的方法步骤

    2024-01-14 14:02:44
  • php版淘宝网查询商品接口代码示例

    2023-11-14 12:01:54
  • Python 3.x 新特性及10大变化

    2023-02-05 09:17:36
  • 使用SAE部署Python运行环境的教程

    2021-02-21 14:26:54
  • MySQL数据库中表的操作详解

    2024-01-26 20:37:27
  • 关于sql server批量插入和更新的两种解决方案

    2024-01-15 02:20:42
  • paramiko模块安装和使用(远程登录服务器)

    2023-02-16 00:05:00
  • Python mutiprocessing多线程池pool操作示例

    2022-02-11 14:19:46
  • python实现二级登陆菜单及安装过程

    2023-09-16 16:05:44
  • asp之家 网络编程 m.aspxhome.com