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插件编写模版的更多相关文章

  1. jQuery插件编写及链式编程模型小结

    JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...

  2. jQuery插件编写及链式编程模型

    jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...

  3. jQuery插件编写,

    jQuery插件编写 jQuery插件 最近搞jquery插件的编写这里做下笔记 给jquery扩展的方式很多,看的我眼花缭乱 方式1 $.fun=function(){} 方式2 $.fn.fun= ...

  4. 自己写jquery插件之模版插件高级篇(一)

    需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...

  5. (转)jQuery插件编写学习+实例——无限滚动

    原文地址:http://www.cnblogs.com/nuller/p/3411627.html 最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简 ...

  6. jQuery插件编写学习+实例——无限滚动

    最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简单学习了下jQuery的插件编写,然后分享出来. 先说下基础知识,基本上分为两种,一种是对象级别的插 ...

  7. jQuery插件编写步骤详解

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...

  8. jquery插件编写【转载】

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...

  9. jQuery插件编写学习中遇见的问题--attr prop

    个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...

随机推荐

  1. Unity插件使用总结

    移动文件夹位置会引起错误的插件:EasySave2.MaterialUI.Gamestrap UI.Beautify

  2. 2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)

    A. Arranging Hat $f[i][j]$表示保证前$i$个数字有序,修改了$j$次时第$i$个数字的最小值. 时间复杂度$O(n^3m)$. #include <bits/stdc+ ...

  3. Hive 笔记

    DESCRIBE EXTENDED mydb.employees  DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees ...

  4. linux安装oracle11g

    准备oracle安装文件 Oracle11gR2包含两个文件linux_11gR2_database_1of2.zip和linux_11gR2_database_2of2.zip,将这两个文件通过SS ...

  5. 将excel数据读入matlab

    1.[NUM,TXT,RAW]=xlsread('example'),其中example是你的excel名,假设所有的数据都在example.xls中. 2.NUM返回的是excel中的数据,TXT输 ...

  6. 【ORACLE】MD5加密

        今天乌干达充值卡入库时,发现有资源已经存在的异常, 异常原因经过核实是由于卡资源密码在库中已经存在, 为进一步查找存在的原因, 因此需要对导入文件密码的MD5 加密, 通过MD5加密后的字符串 ...

  7. MAC帧和IP数据报

  8. WebServer+ADO+百万数据查询

    很简单的demo,查询速度快,易理解,废话不说  上demo 看完就明白了 源码地址:http://files.cnblogs.com/files/SpadeA/WebDemo.zip 这是关于Web ...

  9. 【图文教程】Eclipse for PHP+XAMPP调试配置

    一.下载安装XAMPP 下载地址:https://www.apachefriends.org/download.html, 一路“Next”,安装完毕. 二.下载Eclipse for PHP 下载地 ...

  10. Expert 诊断优化系列------------------冤枉磁盘了

    现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高.软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治.开发人员解决数据问题基本又是 ...