jQuery中文入门指南,翻译加实例,jQuery的起点教程(5)

当你更经常地使用jQuery时,你会发现将你自己的代码打包成插件是很有用处的,它能方便地让你的公司或者其他人进行重用.下一章我们将谈到如何构建一个自己的插件.

本章的相关链接: Plugins for jQuery Tablesorter Plugin

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 });

Next steps(下一步)

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjdxjj.html