知识点:
什么是插件
jQuery插件的模式
jQuery插件的Lightweight Start模式(入门级插件模式) 8.1 插件(Plug-in)
“插件”这个关键字,估计大家在日常生活中经常有所耳闻。例如:各网页浏览器,允许用户安装一些插件,增强用户体验,常见的Adobe Flash播放器,银行安全交易插件等。对于不做编程的朋友来说,是一个无所谓的词,但是对于咱们IT技术行业的朋友来说,是必须要了解,知道的。
咱们不是学者,不做特别规范的学术性研究,只要能够理解、够用就可以了。
因为咱们只是编程行业,所以将插件首先约束在编程领域试着理解。“插件”,是一段程序,它是与主应用程序交互,并扩展、替代主应用程序特定模块(功能)。
在js及js的一些框架Jqurey、ExtJs、Prototype···也比较流行以开发插件的形式,增强其程序的健壮性、伸缩性、安全性。其中JQuery的流行程度、市场占有率是最高的,当然也是咱们本次学习的 主题。
以下两个网址是官方资料,感兴趣的朋友可以去了解一下。
jQuery官网:http://jquery.com/
jQuery官网插件,有许多比较稳定、实用的插件,如果您感兴趣,也可以向官方贡献你的代码:http://plugins.jquery.com/ 下面一段代码展示了jQuery插件Django Superformset 的写法:
/*
* django-superformset
* https://github.com/jgerigmeyer/jquery-django-superformset
*
* Based on jQuery Formset 1.1r14
* by Stanislaus Madueke
*
* Original Portions Copyright (c) 2009 Stanislaus Madueke
* Modifications Copyright (c) 2013 Jonny Gerig Meyer
* Licensed under the BSDv3 license.
*/ (function ($) { 'use strict'; var methods = {
init: function (opts) {
var vars = {}; var opti = $.extend({}, $.fn.superformset.defaults, opts);
var wrapper = vars.wrapper = $(this);
var rows = vars.rows = wrapper.find(options.rowSel); var c = rows.closest(options.containerSel); //@余下的代码略···
}(jQuery)); 完整代码示例下载:http://plugins.jquery.com/django-superformset/
另外,谢谢Jonny Gerig Meyer代码。
如果您还帮助别人解决一些常见的问题,或者想按照自己的想法写一些有趣并可以重复使用的一些插件,那么请跟紧我的步伐,继续学习
8.2 模式
学习任何知识首先需要了解一下基础和一些规则,才能够在其上面构建自己需要的东西。学习jQuery插件也不例外,在很多社区都有一些最佳实践,我们先看看一些最基本的jQuery插件知识。
第一种写法如下,
代码1:
$.fn.myPluginName = function(){
//@您的插件业务逻辑
}
代码2:
(function ($) {
$.fn.myPluginName = function(){
//@您的插件业务逻辑
}
})(jQuery);
代码1与代码2有什么不同,相信对于大家已经明朗化了。第一,将带有 $.fn.myPluginName的代码放入闭包中,可以与外部环境隔离,防止产生冲突,还可以将闭包看做一个模块,以结构化代码的作用;第二,将jQuery以参数的形式传递进去,映射到$符上,可以防止在其它JavaScript库之间产生冲突。
第二种写法如下,
我们可以利用jQuery的jQuery.extend(),能够一次定义多个函数,这种写法的主要意义就是在语义表达上更好。
代码3:
(function ($) {
$.extend($.fn, {
myPlugin : function () {
//@您的插件业务逻辑
}
});
})(jQuery)
8.3 Lightweight Start模式
通过上边的介绍,大家已经具备jQuery插件的基础知识了。下面通过一段简单的代码向大家展示一下Lightweight Start模式,具体解释请看代码注释。
代码4:
/*
* jQuery Lightweight 插件
* 新浪微博 :@席新亮_javascript_html5
* QQ:939898101
* Email:939898101@qq.com
*/ /*
*1,在代码开始之前,加一个分号,可以防止没有正常关闭的插件
*2,undefined是ECMAScript3中定义的,可以修改,但在ECMAScript5中undefined不能修改。
* undefined没有真正传递进来以保证是真正的undefined
*3,把window与document传递进来作为局部变量,可以减少作用域的访问,加快速度,以及降低引用同一个插件的影响
*/
; (function ($, window, document, undefined) {
//私有 默认变量
var myPluginName = "defaultName",
defaults = {
otherName : "value"
};
//私有 构造插件的函数
var ctorPlugin = function (element, options) {
this.element = element; //利用jQuery 的extend 方法合并对象 this.opti defaults, options); this._default = defaults;
this.name = myPluginName ;
this.init();
};
//原型链上添加方法 ctorPlugin .prototype.init = function () { //执行一些初始化的逻辑,然后就可以访问DOM,进行一些业务处理 }; //将插件包装起来,利用模块模式,防止多次实例出现 $.fn[myPluginName ] = function (options) { return this.each(function () { var myPluginNameStr = "plugin_" myPluginName ; if (!$.data(this, myPluginNameStr )) { $.data(this, myPluginNameStr , new ctorPlugin (this, options)); } }); }; })(jQuery, window, document); 用法如下: elementStr为获取节点的指定字符
$(elementStr). defaultName({
otherName : "your value"
});
通过以上代码可以看出:
必须有分号
将window、document、undefined作为参数传入
一些基本的(私有)默认对象
简单的插件构造函数,执行一些初始化
扩展默认值的一些选项
一个包装器避免多次创建
8.4 扩展视野
jQuery 插件官方学习:http://learn.jquery.com/plugins/

jQuery组件写法的更多相关文章

  1. 封装两个简单的Jquery组件

    Jquery给我们提供了很大的方便,我们把他看成是一个公共库,以致在这个公共库上延伸出了很多Jquery插件:在项目过程中,有些插件总是不那么令人满意: 主要说两个项目用途: 1.  遮罩层,跟一般的 ...

  2. Asp.NetCore之组件写法

    本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也通过调用验证码接口来自定义 ...

  3. jQuery组件开发之表格隔行选中效果实现

    一.效果展示如下 jQuery组件之表格插件源码 //表格选中插件 //方式一 (function($){ var chosTabBgColor = function(options){ //设置默认 ...

  4. 基于Bootstrap的DropDownList的JQuery组件的完善版

    在前文 创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件 中,实现了DropDownList的JQuery组件,但是留有遗憾.就是当下拉菜单出现滚动条的时候,滚动条会覆 ...

  5. jquery插件写法

    //传统写法 //全局方法 ;(function($){ $.method = function(){ } //or $.obj = { method1:function(){}, method2:f ...

  6. Jquery插件写法及extentd函数

    JQuery插件写法 JQuery插件又分为类扩展方法和对象扩展方法两种,类插件是定义在JQuery命令空间的全局函数,直接通过可调用,如可调用,如可调用,如.ajax():对象插件是扩展JQuery ...

  7. jQuery 插件写法2

    转载:http://www.xuanfengge.com/jquery-plug-in-written-summary-and-summary-of-writing-object-oriented-m ...

  8. jQuery 插件写法

    一.jQuery插件的类型 1. jQuery方法 很大一部分的jQuery插件都是这种类型,由于此类插件是将对象方法封装起来,在jQuery选择器获取jQuery对象过程中进行操作,从而发挥jQue ...

  9. jquery组件WebUploader文件上传用法详解

    这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

随机推荐

  1. linux杂谈(十九):DNSserver的配置(二)

    1.本机和外网的解析 ​ ​之前讨论了DNS的正向解析和反向解析,但有的时候我们想让DNSserver对于server本机的解析和对于外网的解析是不同的.那就须要在主配置文件里对本机和外网进行不同的配 ...

  2. Java-struts2的问题 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    缺commons-lang3-3.1.jar,添加之后就可以了

  3. 在Windows下使用MinGW静态编译Assimp

    使用MinGW静态编译Assimp 到了5月份了,没有写一篇日志,于是自己从知识库里面拿出一篇文章充数吧.这次将要解说怎样在Windows下使用MinGW静态编译Assimp. Assimp是眼下比較 ...

  4. cocos2dx 以子弹飞行为例解说拖尾效果类CCMotionStreak

    在游戏开发中,有时会须要在某个游戏对象上的运动轨迹上实现渐隐效果.比方子弹的运动轨迹,假设不借助引擎的帮助,这样的效果则须要通过大量的图片来实现.而Cocos2D-x的拖动渐隐效果类CCMotionS ...

  5. 【转】cocos2d-x使用第三方的TTF字体库

    步骤一:找一个ttf字体库 步骤二:找到这个ttf字体库的真实名称 打开你的应用 "字体册"(MAC OS系统下),如下图操作): 找到了字体库真实名称,那么修改将其真名作为为此新 ...

  6. PureMVC(JS版)源码解析(六):MacroCommand类

    上一篇博客,我们讲解了SimpleCommand类,接下来我们看一下与SimpleCommand类很相似的MacroCommand类. MacroCommand类和SimpleCommand类一样,都 ...

  7. linux ptrace II

    第一篇 linux ptrace I 在之前的文章中我们用ptrace函数实现了查看系统调用参数的功能.在这篇文章中,我们会用ptrace函数实现设置断点,跟代码注入功能. 参考资料 Playing ...

  8. JAVA的程序代码小细节,变量的使用,以及一些细节的面试题

    package cn.hncu; public class LableDemo { public static void main(String[] args) { //demo1(); demo2( ...

  9. [Eclipse]The type XXX cannot be resolved. It is indirectly referenced from required .class files

    在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误 ...

  10. JavaScript异步操作

    //伪代码写法,只用来记录结构 function test(){ var dtd=$.Deferred(); if(成功){ dtd.resolve(data1,data2); //传递参数 } el ...