jQuery 插件模板
1、为每一个DOM对象创建一个插件对象
模板定义:
(function($) {
$.pluginName = function(element, options) {
var defaults = {
foo: 'bar',
onFoo: function() {}
}
var plugin = this;
plugin.settings = {}
var $element = $(element),
element = element;
plugin.init = function() {
plugin.settings = $.extend({}, defaults, options);
// code goes here
}
plugin.foo_public_method = function() {
// code goes here
}
var foo_private_method = function() {
// code goes here
}
plugin.init();
}
$.fn.pluginName = function(options) {
return this.each(function() {
//为每一个DOM元素创建插件实例
if (undefined == $(this).data('pluginName')) {
var plugin = new $.pluginName(this, options);
$(this).data('pluginName', plugin);
}
});
}
})(jQuery);
模板使用:
$(document).ready(function() {
// 将插件附加到选择器中的每一个元素(这里通过ID选择器,只有一个元素,下同。)
$('#element').pluginName({'foo': 'bar'});
// 隐式迭代,选择器中每一个元素都会调用该公共方法
$('#element').data('pluginName').foo_public_method();
// 隐式迭代,访问选择器中每一个元素的属性,返回一个数组
$('#element').data('pluginName').settings.foo;
});
2、面向对象的模板,只有一个插件实例
模板定义:
;(function($) {
$.pluginName = function(el, options) {
var defaults = {
propertyName: 'value',
onSomeEvent: function() {}
}
var plugin = this;
plugin.settings = {}
var init = function() {
plugin.settings = $.extend({}, defaults, options);
plugin.el = el;
// code goes here
}
plugin.foo_public_method = function() {
// code goes here
}
var foo_private_method = function() {
// code goes here
}
init();
}
})(jQuery);
模板使用:
$(document).ready(function() {
// 创建插件实例,并且绑定到$('#element')
var myplugin = new $.pluginName($('#element'));
// 调用插件公共方法
myplugin.foo_public_method();
// 获取公有属性的值
myplugin.settings.property;
});
3、面向对象的模板,充分利用习惯的链式编程
模板定义:
; (function ($) {
//构造函数
$.pluginName = function (el, options) {
var defaults = {
propertyName: 'value',
onSomeEvent: function () { }
}
var plugin = this;
plugin.settings = {}
var init = function () {
plugin.settings = $.extend({}, defaults, options);
plugin.el = el;
// code goes here
}
//①:直接方法定义(模板2就是采用这种方式)
plugin.foo_public_method = function () {
//公有方法
// code goes here
}
var foo_private_method = function () {
//私有方法
// code goes here
}
init();
}
//②:原型方法定义(均为公有方法)
$.pluginName.prototype = {
method1: function () {
},
method2: function () {
}
};
//③:原型方法定义 也可以这么写(均为公有方法)
//$.extend($.pluginName, {
// method1: function () {
// },
// method2: function () {
// }
//});
//在插件中使用
$.fn.pluginName = function (options) {
//实例化一个插件实例,通过执行构造函数初始化
var myPlugin = new $.pluginName(this, options);
//调用公有业务方法
myPlugin.method1();
myPlugin.foo_public_method();
//返回 this,便于链式调用
return this;
}
})(jQuery);
模板使用:
$(document).ready(function () {
//熟悉的链式编程
$('#element').pluginName({
//插件options
}).css({}).animate({});
});
4、构造函数提供给外部使用(有点别扭)
模板定义:
; (function ($) {
//构造函数
$.pluginName = function (el, options) {
//去除构造函数中对插件的初始化,转到$.fn.pluginName中初始化。
return $(el).pluginName(options);//该构造函数不是给插件使用,而是给外部调用者使用,需要return以链式编程
}
//②:原型方法定义(均为公有方法)
$.pluginName.prototype = {
method1: function (para1, para2) {
},
method2: function (para1, para2) {
}
};
//③:原型方法定义 也可以这么写(均为公有方法)
//$.extend($.pluginName, {
// method1: function (para1,para2) {
// },
// method2: function (para1,para2) {
// }
//});
//在插件中使用,不会创建插件实例(构造函数是给外部使用的)
$.fn.pluginName = function (options) {
var defaults = {
propertyName: 'value',
onSomeEvent: function () { }
}
var settings = {}
var init = function () {//私有方法
settings = $.extend({}, defaults, options);
// code goes here
}
var foo_private_method = function () {
//私有方法
// code goes here
}
init();
//调用业务方法
$.pluginName.method1(para1, para2);
$.pluginName.method2(para1, para2);
//返回 this,便于链式调用
return this;
}
})(jQuery);
模板使用:
$(document).ready(function () {
//熟悉的链式编程
$('#element').pluginName({
//插件options
}).css({}).show({});
//构造函数提供该外部使用,所以相当于
new $.pluginName($('#element'), {
//插件options
}).css({}).animate({});
});
总结
正如标题所说的那样,每种模板各有特点,但是最具可读性的还是第三种。当然了,模板只是一个套路,修修改改就又会变成另外一种模板了,上面只是总结了比较常见的模板格式,仅供参考。
不错的参考
jQuery 插件模板的更多相关文章
- 我最喜欢的jQuery插件模板
我使用jQuery已经有相当长的时间了,并且我会常常为它写一些插件(plugin).我尝试过用不同的方式去写,现在这个模板是我最喜欢的: 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- 关于jquery插件模板的两个案例
/** * jquery tips 提示插件 jquery.tips.js v0.1beta * * 使用方法 * $(selector).tips({ //selector 为jquery选择器 * ...
- JQuery插件模板
(function($){ $.fn.插件名 = function(settings){ var defaultSettings = { } /* 合并默认参数和用户自定义参数 */settings ...
- 简记 jQuery 插件模板
/** * @lisence jquery plugin demo v1.0.0 * * author: Jeremy Yu * * description: * this is a jquery p ...
- jQuery插件编写及链式编程模型小结
JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...
- jQuery插件编写及链式编程模型
jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...
- 前端模板文件化jQuery插件 $.loadTemplates
工作中使用前端模板引擎,如 artTemplate.jsRender,来替代拼接字符串. 可是直接把模板写在页面上会带来页面臃肿,模板无法重用,与 ASP.NET等后端语言语法冲突等问题. 所以将多个 ...
- 出位的template.js 基于jquery的模板渲染插件
找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一 ...
- javascript&&jquery编写插件模板
javascrpt插件编写模板 这里不分享如何编写插件,只留一个框架模板,使用面向对象的形式进行编写,方便管理 ;(function(window,document){ function FnName ...
随机推荐
- [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】
第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...
- ASP.NET Web Service如何工作(2)
ASP.NET Web Service如何工作(2) [日期:2003-06-26] 来源:CSDN 作者:sunnyzhao(翻译) [字体:大 中 小] HTTP管道一旦调用了.asmx句柄,便 ...
- Server Error The server encountered an error and could not complete your request. 新建站点模版失败
500 Server Error Error: Server Error The server encountered an error and could not complete your req ...
- 08_Spring实现action调用service,service调用dao的过程
[工程截图] [PersonDao.java] package com.HigginCui.dao; public interface PersonDao { public void savePers ...
- OpenJudge 2792 集合加法
1.链接地址: http://bailian.openjudge.cn/practice/2792 2.题目: 总Time Limit: 3000ms Memory Limit: 65536kB De ...
- HTML5新增标签属性
----- 新类型表单 - email 自动校验输入的是不否是email 邮箱:<input type="email" name="user_email" ...
- 跟我一起学Vim补全神级插件--YouCompleteMe
最近重拾Vim,编译部署来补全插件YCM,这个插件的补全效果和在写C代码的时候的自动提示错误信息等还是十分棒的,写点心得下来,也算给自己做个备忘. 快速安装: 首先参考我的.vimrc配置,用Vund ...
- 解决Ubuntu和Windows的文件乱码问题(转载)
解决Ubuntu和Windows的文件乱码问题(debian也通用) 1.转换文件内容编码 Windows下天生的纯文本文件,其中文编码为GBK,在Ubuntu下显示为乱码,可以使用iconv命令 ...
- MVC控制器给View返回实体
前言 这几天把vs12更新到了vs12 5了,因为发现我之前装的12有问题,没有mvc,之后就从itellyou上下载了12的update5更新了一下.说实话,从开发到现在,自己只是平时自己玩用mvc ...
- 扩展:gridview 空数据时显示表头
2015年7月14日16:50:06 Gridview 默认展示数据时,若数据为空,则表格不显示,显示不美观. 针对此问题进行扩展: using System.Web.UI.WebControls; ...