jquery插件编写模版
jquery插件是什么??这里以讨论实力方法为主,比如 $("div").pluginname({});
他的最简单形势应该是
$.prototype.plugin = function(){}
我们一点点来加东西
1,自己的变量不污染全局,别人的变量不污染我们
(function($,undefined){
var window = Function("return this")();//一定是window
$.prototype.plugin = function(){ }
)(jQuery)
2,判断已加载或者处理其他附加数据,处理参数,实例化一个对象,实例化的方式不一定要new一个,你喜欢也可以拷贝一个,工厂一个等。。
function plugin(element, options) {
var self = this;
self.element = element;
self.$element = $(element);
if (typeof options == "object") {
self.opts = $.extend({}, defaults, options);
}
}
$.fn[pluginName] = function (options, callback) {
var dataname = "plugin_" + pluginName;
$(this).each(function (index, item) {
var hasObject = $(item).data(dataname);
if (!hasObject) {
var someobj = new plugin(item, options);
$(item).data(dataname, someobj);
}
});
}
return $.fn[pluginName];
3,AMD CMD加载
// 全局模式
var pluginobj = factory(jQuery);
//UMD
if (typeof exports === 'object') {
module.exports = pluginobj;
}
//AMD
if (typeof define === "function" && define.amd) {
define(pluginName, ["jquery"], function () {
return pluginobj;
});
}
//CMD
if (typeof define === "function" && define.cmd) {
define(pluginName, ['jquery'], function (require, exports, module) {
var $ = require('jQuery');
module.exports = pluginobj;
});
}
全局模式是否开放取决于你的依赖项是否必然加载。
此时把原来的自执行外面再套一层,把原来的自执行改成普通方法改名为factory方法。
完整版:
(function () {
var window = Function("return this")();
var applicationPath = window.applicationPath === "" ? "" : window.applicationPath || "../..";
var pluginName = "mypluginname";
function factory($) {
"use strict";
if ($.isFunction($.fn[pluginName])) {
return $.fn[pluginName];
}
function plugin(element, options) {
var self = this;
self.element = element;
self.$element = $(element);
if (typeof options == "object") {
self.opts = $.extend({}, defaults, options);
}
}
$.fn[pluginName] = function (options, callback) {
//something like old jquery plugin
var dataname = "plugin_" + pluginName;
$(this).each(function (index, item) {
var hasObject = $(item).data(dataname);
if (!hasObject) {
var someobj = new plugin(item, options);
$(item).data(dataname, someobj);
}
});
}
return $.fn[pluginName];;
}
var loaded = false;
//UMD
if (typeof exports === 'object') {
module.exports = factory();
}
//AMD
if (typeof define === "function" && define.amd) {
define(pluginName, ["jquery"], factory);
loaded = true;
}
//CMD
if (typeof define === "function" && define.cmd) {
define(pluginName, ['jquery'], function (require, exports, module) {
var $ = require('jQuery');
module.exports = factory($);
});
}
// other
if (!jQuery.xxx && jQuery.loadScript) {
$.loadScript("/scripts/plugins/xxx.js", function () {
pluginobj = factory(jQuery);
})
}
if (!loaded) {
// 全局模式 也可以不判断强制加载是执行一遍全局模式
factory(jQuery);
}
})();
jquery插件编写模版的更多相关文章
- jQuery插件编写及链式编程模型小结
JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...
- jQuery插件编写及链式编程模型
jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...
- jQuery插件编写,
jQuery插件编写 jQuery插件 最近搞jquery插件的编写这里做下笔记 给jquery扩展的方式很多,看的我眼花缭乱 方式1 $.fun=function(){} 方式2 $.fn.fun= ...
- 自己写jquery插件之模版插件高级篇(一)
需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...
- (转)jQuery插件编写学习+实例——无限滚动
原文地址:http://www.cnblogs.com/nuller/p/3411627.html 最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简 ...
- jQuery插件编写学习+实例——无限滚动
最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简单学习了下jQuery的插件编写,然后分享出来. 先说下基础知识,基本上分为两种,一种是对象级别的插 ...
- jQuery插件编写步骤详解
如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...
- jquery插件编写【转载】
如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...
- jQuery插件编写学习中遇见的问题--attr prop
个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...
随机推荐
- 使用nose 进行Python项目的自动化测试
一.为什么使用nose? 编写测试更容易.nose可以自动识别继承于unittest.TestCase的测试单元,并执行测试,而且,nose也可以测试非继承于unittest.TestCase的测试单 ...
- linux常用命令总结
du -sh * 当前目录下所有文件占用空间大小,df 空间占用 top 资源使用情况 M 根据驻留内存大小进行排序 tail 1.tail -f filename说明:监视filename文件的尾 ...
- AppDomain对于静态对象的独享引用
AppDomain可以理解为一个独立的沙箱,当有独立的第静态对象在appDomain中被访问时,会在appDomain中产生独立的内存对象.比如appDomain1 appDomain2同时对 静态对 ...
- 通读AFN①--从创建manager到数据解析完毕
流程梳理 今天开始会写几篇关于AFN源码解读的一些Blog,首先要梳理一下AFN的整体结构(主要是讨论2.x版本的Session访问模块): 我们先看看我们最常用的一段代码: AFHTTPSessio ...
- MVC框架
MVC (Modal View Controler)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用 ...
- 可变字符串NSMutableString
//可变字符串继承自字符串 //拼接 NSMutableString *string = [NSMutableString string]; [string appendString:@"今 ...
- 谈 CSS 模块化
以前看过模块化的相关资料以及解释,对模块化有了一个表皮的了解,自己也做了一些相关的实践,由于接触到的项目交小,所以也没能更好的去体现和理解模块化,但总体还是有那么一些感悟,但是如果要说怎么才能算是好的 ...
- css3新属性object-fit,对页面img处理
1.http://my.xueh5.com/xh5639998239/detail-3661.html 针对其进行深度讲解推荐 http://www.zhangxinxu.com/wordpress/ ...
- fastJson使用
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,由阿里巴巴的工程师开发. 主要特点: 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson ...
- C# 读取XML注释
C#可以通过反射读取类的字段/方法等,可是该如何获取该字段的XML注释? 具体目的:有一个实体类,页面需要有一个与其对应的table,样式大体为 <tr> <td>地东经< ...