jQuery插件开发入门
前言
jQuery插件开发包括两种:
-
给jQuery添加静态方法
-
给jQuery的原型添加方法
给jQuery添加静态方法
-
直接添加新的全局函数
jQuery.foo = function() {
alert('This is a test. This is only a test.');
}; -
使用jQuery.extend(object)
jQuery.extend({
foo: function() {
alert('This is a test. This is only a test.');
},
bar: function(param) {
alert('This function takes a parameter, which is "' + param +'".');
}
});
对于一些全局配置的插件,可以在插件中进行调用,这样直接引用插件javascript即可,不用再调用
给jQuery的原型添加方法
这是插件开发中最常用的一种方法
最简单的形式
(function($){
$.fn.pluginName = function() {
// code
};
})(jQuery);
上下文
在插件函数的立即作用域中,关键字this指向调用插件的jQuery对象,不需要再用$包裹
(function($){
$.fn.pluginName = function() {
// 没有必要再写$(this),因为"this"就是jQuery对象
};
})(jQuery);
保持链式调用
为了保持链式调用,插件请return this。
设置默认参数并将之暴露出来
(function($){
$.fn.pluginName = function(options) {
var opts = $.extend({}, $.fn.hilight.defaults, options);
};
$.fn.pluginName.defaults = {
foo: 'bar'
};
})(jQuery);
这样用户既可以用过传参也可以通过修改$.fn.pluginName.defaults来修改默认参数
暴露一些公有函数
(function($){
$.fn.pluginName = function(options) {
var opts = $.extend({}, $.fn.pluginName.defaults, options);
};
$.fn.pluginName.defaults = {
foo: 'bar'
};
$.fn.pluginName.foo = function() {
return 'bar';
};
})(jQuery);
这样用户既可以调用公有函数,也可以去修改它。
更安全的闭包写法
;(function($,window,document,undefined){
$.fn.pluginName = function() {
// code
};
})(jQuery,window,document);
加上“;”是为了防止插件之前代码没有“;”引发的错误,加上window和document是这样window等系统变量在插件内部就有了一个局部的引用,可以提高访问速度,同时内部也可以压缩这些变量,undefined是为了防止他人误修改undefined引发插件bug。
更多
以下出自网友的博客
(function () {
var Plugin,
privateMethod; //插件的私有方法
/**
* 这里是一个自运行的单例模式。
*
*/
Plugin = (function () {
/**
* 插件实例化部分,初始化时调用的代码可以放这里
*/
function Plugin(element, options) {
//将插件的默认参数及用户定义的参数合并到一个新的obj里
this.settings = $.extend({}, $.fn.plugin.defaults, options);
//将dom jquery对象赋值给插件,方便后续调用
this.$element = $(element);
}
/**
* 插件的公共方法,相当于接口函数,用于给外部调用
*/
Plugin.prototype.doSomething = function () {
/**
* 方法内容
*/
};
return Plugin;
})();
/**
* 插件的私有方法
*/
privateMethod = function () {
};
/**
* 这里是关键
* 定义一个插件 plugin
*/
$.fn.plugin = function (options) {
var instance;
instance = this.data('plugin');
/**
*判断插件是否已经实例化过,如果已经实例化了则直接返回该实例化对象
*/
if (!instance) {
return this.each(function () {
//将实例化后的插件缓存在dom结构里(内存里)
return $(this).data('plugin', new Plugin(this, options));
});
}
if (options === true) return instance;
/**
* 优雅处: 如果插件的参数是一个字符串,则 调用 插件的 字符串方法。
* 如 $('#id').plugin('doSomething') 则实际调用的是 $('#id).plugin.doSomething();
* doSomething是刚才定义的接口。
* 这种方法 在 juqery ui 的插件里 很常见。
*/
if ($.type(options) === 'string') instance[options]();
return this;
};
/**
* 插件的默认值
*/
$.fn.plugin.defaults = {
property1: 'value',
property2: 'value'
};
/**
* 优雅处: 通过data-xxx 的方式 实例化插件。
* 这样的话 在页面上就不需要显示调用了。
*/
$(function () {
return new Plugin($('[data-plugin]'));
});
}).call(this);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?