jQuery插件编写:基础篇(一)

我相信每个使用过jQuery的朋友都会对它强大的魅力所折服。jQuery给我们提供了一组跨浏览器的操作DOM的增强API,这使得我们开发拥有丰富功能的Web应用变得更加简单。另外,jQuery也采用了非常棒的插件机制,在增强了jQuery的功能的同时保持了jQuery核心库的体积很小。实际上,拥有众多插件的支持,也是我们使用jQuery的另一个重要原因。也许是为了项目需要,也许是为了自己能一试身手,我们想要自己开发插件。

jQuery给我们提供的操作方法分为两种,一种是工具型的函数,它们都直接添加到$命名空间上,如$.ajax(). $.trim()等等。另一种是jQuery对象上的方法,如:$("#divDemo").width(400)。同样,我们编写的插件也将分为两类:

(1)直接定义在$命名空间上的工具函数

(2)添加到jQuery包装集(jQuery对象)上的方法

在这一篇中,我们将先介绍如何开发第一种插件。

基于JS的动态性,我们很容易就能完成一个简单的插件。

$.sayHello = function() {
	alert("Hello World!");
}
$.sayHello(); // alert "Hello World!"

但是我们有时不能保证$符号一定指代的是jQuery,用户可能使用了$.noConflict()。因此我们要采用一个小技巧来实现。

(function($) {
	// 这里还可以添加插件的私有变量
	
	$.sayHello = function() {
		alert("Hello World!");
	}
})(jQuery);
$.sayHello();// alert "Hello World!"

这里的不同之处是我们把插件代码放在了一个即时执行函数中,把jQuery作为参数传递给了函数内部的$变量中,这下我们就可以放心的使用我们心爱的$符号了。而且这种方式还给我们带来了一个惊喜,我们可以在这个匿名函数中定义一些临时变量,来辅助我们开发一些复杂的插件,而不会污染全局变量环境。如下面的例子所示:

(function($) {
	// 这里还可以添加插件的私有变量
	var title = "警告"; // 默认标题
	var content = "系统运行错误"; // 默认消息内容
	
	$.sayHello = function(t, c) {
		var msg = "";
		if(t) {
			msg += "TITLE:" + t;
		} else {
			msg += "TITLE:" + title; // 用户没指定就选择默认
		}
		msg += "\n";
		if(c) {
			msg += "CONTENT:" + c;
		} else {
			msg += "CONTENT:" + content; // 默认值
		}
		alert(msg);
	}
})(jQuery);
$.sayHello(); // alert TITLE:警告(换行)CONTENT:系统运行错误
$.sayHello("提示","操作成功"); // alert TITLE:提示(换行)CONTENT:操作成功

这里就有了一个插件的基本原型了,我们给它添加了默认配置值。插件使用者不传任何参数将以默认值来弹出提示,如果传入了参数就以用户传入的参数进行显示。其实我们所定义的title和content都是插件的配置项。有时候一个插件可能包含几十个配置项,这样一个个去判断用户是否传入参数显然不妥。而且按照这种参数列表的形式提供几十项配置更是不可能。这里我们有另外一个技巧可以解决上述问题。用一个普通JS对象作为函数的参数。

(function($) {
	var settings = {
		title : "警告",
		secondTitle : "系统警告",
		content : "系统运行错误"
	};
	$.sayHello = function(options) {
		settings = $.extend(settings, options || {}); // options 中的项会依次覆盖setings中的项
		var msg = "TITLE:" + settings.title + "\n";
		msg += "SECOND_TITLE:" + settings.secondTitle + "\n";
		msg += "CONTENT:" + settings.content;
		alert(msg);
	}
})(jQuery);
$.sayHello({
	title:"First",
	secondTitle:"Scond",
	content:"Hello"
}); // 按照这种方式去调用插件,里面的title,secondTitle, content 都是可选的

这种方式是目前比较常用的插件开发模式。采用一个options对象作为插件函数的参数,便可以提供大量可选的参数配置。而在插件内部使用一个settings对象来列出所有的默认配置值。再借助神奇的$.extend()函数,我们可以很方便的使用options来覆盖Settings中的默认值。关于$.extend()简单举一个例子,比如:

var settings = {
	name : "Jim",
	sex : "Boy"
}
var options = {
	name : "Lucy"
}
settings = $.extend(settings, options || {});
执行完成后,Settings = {name : "Lucy", sex : "Boy"}

另外第二个参数采用options || {} 是为了防止options未定义,就用空对象{}去覆盖。$.extend()函数还有其他的一些用法,可以查阅相关文档。

下面给出编写第一类插件(实用函数)的基本框架结构:

(function($) {
	var settings = {
		def1 : "def1",
		def2 : "def2",
		//... 更多默认配置
	};
	$.myPlugin = function(options) {
		settings = $.extend(settings, options || {}); // 合并默认和用户配置
		
		// 这里写你的插件逻辑
	}
})(jQuery);
发布了40 篇原创文章 · 获赞 18 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/yinxiangzhongqing/article/details/104434499
今日推荐