使用jQuery来做前端实有一段时间了,确实也感觉到jQuery的强大和书写相对简单了,不过一直也没去研究过相关的源码,以后有机会还是值得去看看jQuery方面源吗,这段时间对js接触的较多,使用了各种jQuery相关的插件,比如jquery.ui.datepicker.js,flexigrid.js等,确实给开发工作带来了较大的方便,今天自己也依葫芦画瓢,理解了一下jQuery对于插件方面的知识。
1、jQuery插件编写准备
要使用jQuery进行自定义插件的编写,首先应该的是了解jQuery的插件机制或者说是通过jQuery库本身提供的哪些函数进行插件的编写,主要涉及的两个函数是:jQuery.extend(object)和jQuery.fn.extend(object),其具体作用可以通过查找jQuery的API文档 得到,这里也把API简单转过来:
A、 jQuery.extend(object)
jQuery.extend({ min: function(a, b) { return a < b ? a : b; }, max: function(a, b) { return a > b ? a : b; } });
jQuery.min(2,3); //=> 2 $.max(4,5); //=>5
2、简单的jQuery插件的编写
A、jQuery插件的基本格式
/* * digitClocker * @author: zhoucl * @date : 08/11/2011 */ (function($, undefined){ ... //code here ... })(jQuery);
B、将原来直接javascript编写的一个电子时钟改写为jQuery插件使用,代码如下:
/*
* digitClocker
* @author: zhoucl
* @date : 03/11/2011
*/
(function($, undefined){
$.extend($.fn, {
digitclocker: function(settings){
var params = $.extend({
baseURL: '../js/jquery/custom_plugins/',
imgPath: 'digits/'
}, settings);
for(var i = 1; i < 9; i++) {
if(i % 3 == 0) $(this).append("<img alt='0' src='" + params.baseURL + params.imgPath + "colon.gif'>");
else $(this).append("<img class='clockImage' alt='0' src='" + params.baseURL + params.imgPath + "0.gif'>");
}
new DigitClock(params, $(this));
}
});
setInterval(function(){
DigitClock.reDraw();
}, 1000);
DigitClock = function(params, container) {
this.params = params;
this.container = container;
DigitClock.clocks.push(this);
DigitClock.reDraw();
}
DigitClock.clocks=[];
DigitClock.reDraw = function() {
var d=new Date();
for (var i = 0; i < this.clocks.length; i++) {
this.clocks[i].setTime(d.getHours(),d.getMinutes(),d.getSeconds());
}
}
DigitClock.preZero = function(n, pos) {
return ("0"._digitClockRepeat(pos-1)+n).slice(-pos);
}
DigitClock.prototype = {
setTime : function(h, i ,s) {
this.setImage(
DigitClock.preZero(h,2) + DigitClock.preZero(i,2) + DigitClock.preZero(s,2)
)
},
setImage: function(s) {
s = s.split("");
var baseURL = this.params.baseURL;
var imgPath = this.params.imgPath;
var i = 0;
$(".clockImage", this.container).each(function(){
$(this).attr("src", baseURL + imgPath + s[i++] +".gif");
});
}
}
String.prototype._digitClockRepeat = function(n) {
return new Array(n+1).join(this);
}
})(jQuery);
引用上述js文件,在页面中得调用代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>simple_test.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--调用jQuery的库:jquery-1.5.2.js-->
<script src="../js/jquery/jquery-1.5.2.js" type="text/javascript"></script>
<script src="../js/jquery/custom_plugins/jquery.clzps.digitclock.js" type="text/javascript"></script>
<script>
$(function(){
$('#digitClock').digitclocker({
baseURL: '../js/jquery/custom_plugins/',
imgPath: 'digits/'
});
});
</script>
</head>
<body>
<div id="digitClock"></div>
</body>
</html>
效果图如下:
至此,一个简单的jQuery插件编写完成!~~本节源码也可访问放在google开源 链接