博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery插件开发入门
阅读量:7222 次
发布时间:2019-06-29

本文共 3513 字,大约阅读时间需要 11 分钟。

前言

jQuery插件开发包括两种:

  1. 给jQuery添加静态方法

  2. 给jQuery的原型添加方法

给jQuery添加静态方法

  1. 直接添加新的全局函数

    jQuery.foo = function() {

    alert('This is a test. This is only a test.');
    };

  2. 使用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);

参考

转载于:https://www.cnblogs.com/ang-/p/6599322.html

你可能感兴趣的文章
gradle build docker image
查看>>
D语言/DLang 2.085.1 发布,修复性迭代
查看>>
Proxy-Go v7.2 发布,一个端口一键开启 http(s)\ss\socks 服务
查看>>
oracle数据库导入导出命令
查看>>
作为“云计算”的延伸,“雾计算”只是一种炒作吗?
查看>>
Android Studio "nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64, /vendor/lib64, /syste
查看>>
BTA | 周政军:区块链中侧链和分片解决不了的扩容问题,交给DAG吧!
查看>>
不要仅为85%的用户设计:关注无障碍设计
查看>>
特斯拉主动召回,有5.3万辆车刹住了之后就没法继续开走了
查看>>
于小镭:区块链将从三方面带来颠覆性认知革命
查看>>
SpaceX发射机密间谍卫星,系与美国防部签订的第一单合作
查看>>
亚马逊推出FreeTime Android应用程序,开放适合儿童资源
查看>>
Python1
查看>>
jquery.idTabs使用方法
查看>>
需求分析详细设计概要设计说明书部分样本
查看>>
数字货币交易系统火爆的背后是政策的大力支持
查看>>
gulp与webpack的区别
查看>>
ORA-12547:TNS:lost contact 问题分析思路
查看>>
解决firefox疯狂读硬盘的问题
查看>>
清华产业十大创新项目评选 新华三H3Cloud OS夺冠
查看>>