JQuery插件开发(一):
最近项目中需要自定义一些数据报表,jquery的datagrid并不能完全满足系统需求,真正是一个头两个大。所以潜下心来研究如何开发插件。
jQuery插件的开发包括两种:一种是公用函数的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法。jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级别的插件开发,相当于在JQuery下面扩展一个类。
1,函数级别的开发
1.1 添加一个新的全局函数
咱们从最经典的程序员书法说起:
jQuery.helloworld = function() {
alert('Hello World');
};
1.2 使用jQuery.extend(object)
jQuery.extend({
helloworld: function() {
alert('This is a test. This is only a test.');
},
helloworld1: function(param) {
alert(param + ':你好.');
}
});
调用时和一个函数的一样的:jQuery.helloworld();jQuery.helloworld1('小明');或者$.helloworld();$.helloworld1('小明');
1.3 使用命名空间
jQuery.myPlugins = {
helloworld:function() {
alert('Hello World');
},
helloworld1:function(param) {
alert(param + ':你好.');
}
};
采用命名空间的函数仍然是全局函数,调用时采用的方法:
$.myPlugins.helloworld();
$.myPlugins.helloworld1('baz');
了解了一些基础知识后,咱们来开发一个实例。
基于jquery来开发数组的分组(group by)功能,说句题外话,分组这个功能完全可以在代码中实现(linq):
主要思想是根据数组对象和任意的属性名称(单属性,后期如有需要的话,考虑扩展成多属性分组)
jQuery.myPlugins = {
function GroupBy(object, property) {
if (!object || object.length < 1) {
return;
}
var listRes = new Array();
$.each(object, function (i, n) {
if (jQuery.inArray(n[property], listCount) < 0) {
listCount.push(n[property]);
}
});
if (listCount.length > 0) {
$.each(listCount, function (i, n) {
var _childList = {};
_childList["GroupBy"] = n;
_childList["GroupInfo"] = $.grep(object, function (gn, gi) {
if (gn[property] == n) {
return gn;
}
});
listRes.push(_childList);
});
}
return listRes;
}
};