参考 http://www.2cto.com/kf/201507/417874.html

—————————————————————————————————————————————————————————

插件开发- 两种

类级别 - 三种

jQuery.extend(object);为扩展jQuery类本身,为类添加新的方法。

  • 添加全局函数
$.foo1 = function() {
// code
}
$.foo2 = function(param) {
// code
}
$.foo1();
$.foo2(1);
  • 使用jQuery.extend(object)添加全局函数 ;

    禁止使用js的函数名和变量名 , 但仍有可能与其他jquery插件冲突 , 所以使用下面的方式封装到另一个命名空间中

$.extend({
foo1: function() {
// code
},
foo2: function() {
// code
}
});
  • 采用命名空间的方式封装全局函数
$.myPlugin = {
foo1: function() {
// code
},
foo2: function(param) {
// code
}
}
$.myPlugin.foo1();
$.myPlugin.foo2(1);

对象级别

jQuery.fn.extend(object);给jQuery对象添加方法。

jquery本身是一个封装好的类;

$("#myDiv")会生成一个jquery类的实例;

通过jQuery.fn.extend可以对jquery.prototype进行扩展,为jquery类添加成员函数,所有的jquery类实例都可以使用这个成员函数

  • 普通形式

    定义了一个jQuery函数,将jQuery实参传递进去并立即调用执行;

    好处是在写jQuery插件时也可以使用$这个别名,不会与prototype冲突;

    metisMenu侧边栏下拉插件也是以这种形式写的

    p.s.尽量在自调用函数前加分号,见文章底部细节说明

(function($) {
$.fn.pluginName = function() {
// code
}
})(jQuery);
$("#mydiv").pluginName();
  • 分解代码为多个函数而不增加命名空间

    将函数制定为属性,我们已经声明pluginName为jquery属性对象;

    任何其他的属性或函数需要暴露出来时,都可以在pluginName函数中被声明属性;

  • 接受options参数控制插件的行为
(function($) {
$.fn.pluginName = function(option) {
var defaults = {
background: "yello",
foreground: "red"
};
}
var opts = $.extend(defaults, options);
// plugin code
})(jQuery);
$("#mydiv").pluginName({
foreground: "blue"
});
  • 暴露插件的默认设置
$.fn.pluginName = function(options) {
var opts = $.extend({}, $options);
};
$.fn.pluginName.default = {
foreground: "red",
background: "yellow"
};
  • 样例
$.fn.extend({
plugin: function() {
$(this).click(function() {
// click event code
});
}
});
$("#input1").plugin();
<input id = "input1" type = "text" / >

—————————————————————————————————————————————————————————

细节

开头使用分号

加引号是为了防止多个js文件合并(脚本压缩)后运行异常,但由于目前(2015.4)普遍基于语法解析来进行压缩(UglifyJs)下,并不是必须的了,但通常作为分号教条;详解见 https://www.zhihu.com/question/29526862

;(function($, window, document, undefined) {
// code
})(jQuery, window, document);

JavaScript | JQuery插件定义方法的更多相关文章

  1. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  2. jQuery插件制作方法详解

        jQuery插件制作方法详解   jquery插件给我的感觉清一色的清洁,简单.如Jtip,要使用它的功能,只需要在你的元素的class上加 上Jtip,并引入jtip.js及其样式即可以了. ...

  3. JavaScript jQuery 中定义数组与操作及jquery数组操作 http://www.jb51.net/article/76601.htm

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  4. 编写jQuery插件的方法和注意点

    编写jQuery插件的方法和注意点 插件的种类 jQuery的插件主要分为3种类型. 1. 封装对象方法的插件 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的 ...

  5. jQuery插件扩展方法

    jQuery为扩展插件提拱了两个方法,分别是: jQuery.extend(object) —— 给jQuery对象添加方法. jQuery.fn.extend(object) —— 为扩展jQuer ...

  6. JQuery插件定义

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...

  7. JQuery : 插件定义

    来源:http://www.cnblogs.com/xcj26/p/3345556.html 一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写("#"), ...

  8. JQuery 插件一般方法

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

  9. 【转】JQuery插件定义

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写("#"),("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人,直 ...

随机推荐

  1. coreseek 段错误 (core dumped) 问题

    coreseek建立索引出现上面问题经过测试发现有下面几个原因: 1. 分词配置文件不存在  uni.lib 2. uni.lib配置文件格式不正确

  2. Socket读取页面

    http://www.knowsky.com/363189.html http://hi.baidu.com/myyers/item/f90fa3f57d89e1d243c36a34 http://h ...

  3. [BZOJ3456]城市规划(生成函数+多项式求逆+多项式求ln)

    城市规划 时间限制:40s      空间限制:256MB 题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.  刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一 ...

  4. [TCO2013]LitPanels

    题意:一个$n\times m$的无色网格,你可以在其中选择两个$x\times y$的子矩形并在其中将其中任意的格子涂上颜色,问最终能得到多少种不同的网格 做这题会用到一个概念叫包围盒(boundi ...

  5. 【多重背包】CDOJ1691 这是一道比CCCC简单题经典的中档题

    #include<cstdio> #include<algorithm> using namespace std; int n,V,w[110],c[110],a[110],f ...

  6. Android Studio 导出APK

    (1)Android Studio菜单Build->Generate Signed APK     (2)弹出窗口     (3)创建密钥库及密钥,创建后会自动选择刚创建的密钥库和密钥(已拥有密 ...

  7. [转]Spring Security学习总结二

    原文链接: http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html http://www.blogjava.net/red ...

  8. 在Linux系统环境下修改MySQL的root密码

    root用户登录系统 /usr/local/mysql/bin/mysqladmin -u root -p password 新密码 enter password 旧密码 第二种方法: root用户登 ...

  9. opensue fstab故障恢复

    date: 20140505 author: Jin 故障背景: 早上启动本本 无法启动,报错信息(几个关键) WARNING:Failed to connect to lvmetad: No suc ...

  10. HDU 1864 Brave Game 【组合游戏,SG函数】

    简单取石子游戏,SG函数的简单应用. 有时间将Nim和.SG函数总结一下……暂且搁置. #include <cstdio> #include <cstring> #define ...