jQuery 插件模板

1、为每一个DOM对象创建一个插件对象

模板定义:

 1 (function($) {
 2
 3     $.pluginName = function(element, options) {
 4
 5         var defaults = {
 6             foo: ‘bar‘,
 7             onFoo: function() {}
 8         }
 9
10         var plugin = this;
11
12         plugin.settings = {}
13
14         var $element = $(element),
15              element = element;
16
17         plugin.init = function() {
18             plugin.settings = $.extend({}, defaults, options);
19             // code goes here
20         }
21
22         plugin.foo_public_method = function() {
23             // code goes here
24         }
25
26         var foo_private_method = function() {
27             // code goes here
28         }
29
30         plugin.init();
31
32     }
33
34     $.fn.pluginName = function(options) {
35         return this.each(function() {
36             //为每一个DOM元素创建插件实例
37             if (undefined == $(this).data(‘pluginName‘)) {
38                 var plugin = new $.pluginName(this, options);
39                 $(this).data(‘pluginName‘, plugin);
40             }
41         });
42
43     }
44
45 })(jQuery);

模板使用:

 1 $(document).ready(function() {
 2
 3     // 将插件附加到选择器中的每一个元素(这里通过ID选择器,只有一个元素,下同。)
 4     $(‘#element‘).pluginName({‘foo‘: ‘bar‘});
 5
 6     // 隐式迭代,选择器中每一个元素都会调用该公共方法
 7     $(‘#element‘).data(‘pluginName‘).foo_public_method();
 8
 9     //  隐式迭代,访问选择器中每一个元素的属性,返回一个数组
10     $(‘#element‘).data(‘pluginName‘).settings.foo;
11
12 });

2、面向对象的模板,只有一个插件实例

模板定义:

 1 ;(function($) {
 2
 3     $.pluginName = function(el, options) {
 4
 5         var defaults = {
 6             propertyName: ‘value‘,
 7             onSomeEvent: function() {}
 8         }
 9
10         var plugin = this;
11
12         plugin.settings = {}
13
14         var init = function() {
15             plugin.settings = $.extend({}, defaults, options);
16             plugin.el = el;
17             // code goes here
18         }
19
20         plugin.foo_public_method = function() {
21             // code goes here
22         }
23
24         var foo_private_method = function() {
25             // code goes here
26         }
27
28         init();
29
30     }
31
32 })(jQuery);

模板使用:

 1 $(document).ready(function() {
 2
 3     // 创建插件实例,并且绑定到$(‘#element‘)
 4     var myplugin = new $.pluginName($(‘#element‘));
 5
 6     // 调用插件公共方法
 7     myplugin.foo_public_method();
 8
 9     // 获取公有属性的值
10     myplugin.settings.property;
11
12 });

3、面向对象的模板,充分利用习惯的链式编程

模板定义:

 1 ; (function ($) {
 2     //构造函数
 3     $.pluginName = function (el, options) {
 4
 5         var defaults = {
 6             propertyName: ‘value‘,
 7             onSomeEvent: function () { }
 8         }
 9
10         var plugin = this;
11
12         plugin.settings = {}
13
14         var init = function () {
15             plugin.settings = $.extend({}, defaults, options);
16             plugin.el = el;
17             // code goes here
18         }
19         //①:直接方法定义(模板2就是采用这种方式)
20         plugin.foo_public_method = function () {
21             //公有方法
22             // code goes here
23         }
24
25         var foo_private_method = function () {
26             //私有方法
27             // code goes here
28         }
29
30         init();
31
32     }
33     //②:原型方法定义(均为公有方法)
34     $.pluginName.prototype = {
35         method1: function () {
36         },
37         method2: function () {
38         }
39     };
40
41     //③:原型方法定义 也可以这么写(均为公有方法)
42     //$.extend($.pluginName, {
43     //    method1: function () {
44     //    },
45     //    method2: function () {
46     //    }
47     //});
48
49     //在插件中使用
50     $.fn.pluginName = function (options) {
51         //实例化一个插件实例,通过执行构造函数初始化
52         var myPlugin = new $.pluginName(this, options);
53         //调用公有业务方法
54         myPlugin.method1();
55         myPlugin.foo_public_method();
56         //返回 this,便于链式调用
57         return this;
58     }
59
60 })(jQuery);

模板使用:

1 $(document).ready(function () {
2     //熟悉的链式编程
3     $(‘#element‘).pluginName({
4         //插件options
5     }).css({}).animate({});
6 });

4、构造函数提供给外部使用(有点别扭)

模板定义:

 1 ; (function ($) {
 2     //构造函数
 3     $.pluginName = function (el, options) {
 4         //去除构造函数中对插件的初始化,转到$.fn.pluginName中初始化。
 5         return $(el).pluginName(options);//该构造函数不是给插件使用,而是给外部调用者使用,需要return以链式编程
 6     }
 7     //②:原型方法定义(均为公有方法)
 8     $.pluginName.prototype = {
 9         method1: function (para1, para2) {
10         },
11         method2: function (para1, para2) {
12         }
13     };
14
15     //③:原型方法定义 也可以这么写(均为公有方法)
16     //$.extend($.pluginName, {
17     //    method1: function (para1,para2) {
18     //    },
19     //    method2: function (para1,para2) {
20     //    }
21     //});
22
23     //在插件中使用,不会创建插件实例(构造函数是给外部使用的)
24     $.fn.pluginName = function (options) {
25         var defaults = {
26             propertyName: ‘value‘,
27             onSomeEvent: function () { }
28         }
29
30         var settings = {}
31
32         var init = function () {//私有方法
33             settings = $.extend({}, defaults, options);
34             // code goes here
35         }
36
37         var foo_private_method = function () {
38             //私有方法
39             // code goes here
40         }
41
42         init();
43
44         //调用业务方法
45         $.pluginName.method1(para1, para2);
46         $.pluginName.method2(para1, para2);
47
48         //返回 this,便于链式调用
49         return this;
50     }
51
52 })(jQuery);

模板使用:

 1 $(document).ready(function () {
 2     //熟悉的链式编程
 3     $(‘#element‘).pluginName({
 4         //插件options
 5     }).css({}).show({});
 6
 7     //构造函数提供该外部使用,所以相当于
 8     new $.pluginName($(‘#element‘), {
 9         //插件options
10     }).css({}).animate({});
11 });

总结

正如标题所说的那样,每种模板各有特点,但是最具可读性的还是第三种。当然了,模板只是一个套路,修修改改就又会变成另外一种模板了,上面只是总结了比较常见的模板格式,仅供参考。

jQuery 插件模板

时间: 2024-10-10 04:04:01

jQuery 插件模板的相关文章

jQuery插件模板

制作JQuery插件的基本框架演示:http://www.huiyi8.com/chajian/ (function($){    //The jQuery.aj namespare will automatically be created if it doesn't exist    $.widget("aj.filterable",{        //These options will be used as defaults        options: {classNam

我最喜欢的jQuery插件模板

我使用jQuery已经有相当长的时间了,并且我会常常为它写一些插件(plugin).我尝试过用不同的方式去写,现在这个模板是我最喜欢的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ;(function($) {   // multiple plugins can go here   (function(pluginName) {     var default

简记 jQuery 插件模板

1 /** 2 * @lisence jquery plugin demo v1.0.0 3 * 4 * author: Jeremy Yu 5 * 6 * description: 7 * this is a jquery plugin Template 8 * see the end of this document to learn how to use the jquery plugin 9 */ 10 ; 11 (function($, window, document, undefi

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

JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下: (function($){ $.fn.m

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

jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下:

出位的template.js 基于jquery的模板渲染插件,简单、好用

找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一款,和我在公司之前用的差不多(apicloud云端开发app,致敬[百小僧]大神封装的HUI,简化了在公司很多工作), 这款模板渲染和HUI的很相似,也比较简单  基于jquery的模板渲染插件. 附上github https://github.com/yanhaijing/template.js

10条建议让你创建更好的jQuery插件

前言:在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使用相同的设计模式和架构也让修复bug或者二次开发更容易.一套经过验证的架构可以保证我的插件不出大的问题,不论插件简单还是复杂.我在这里分享10条我总结的经验. 1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存

jQuery插件编写

jQuery种类 1.封装对象方法的插件,这种插件是我们常用的插件,后面将会具体针对这种插件介绍,如:$("#div").parent(); 2.封装全局函数的插件 如:jQuery.ajax() 3.选择器插件 如:$("ul li:eq(0)") 基本要点 1.所有的对象方法(第1种)都应该附加在jQuery.fn=jQuery.prototype,而所有的全局函数都应该附加在jQuery上 2.this在插件内部,是通过选择器获取的jQuery对象,而例如cl

10条建议帮助你创建更好的jQuery插件

本文总结了帮助你创建更好jQuery插件的10条建议.分享给大家供大家参考.具体说明如下: 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使用相同的设计模式和架构也让修复bug或者二次开发更容易.一套经过验证的架构可以保证我的插件不出大的问题,不论插件简单还是复杂.我在这里分享10条我总结的经验. 1. 把你的代码全部放在闭包里面 这是我用的最多的一条.