JavaScript的jQuery库插件的简要开发指南


Posted in Javascript onAugust 12, 2015

jQuery 插件通常分两类。

  1.     基于选择器的插件(支持链式操作)
  2.     不基于选择器的插件(不支持链式操作)

前段时间简单学习了 jQuery 插件开发,开发了两个简单的插件,在此对两种插件的开发模式做简要总结。
基于选择器的插件

通常开发模式如下:

(function($, window, undefined) {
 $.fn.PluginName = function(opts) {
 var defaults = {
  // 插件自定义选项的默认值
 };

 // 以用户的自定义选项覆盖默认选项
 var options = $.extend(defaults, opts || {});

 return this.each(function() { // 让插件支持链式操作
  // 在这里编写插件功能代码
 });
 };
})(jQuery, window);

首先,创建一个匿名的自执行函数,形参为 $ 、 window 和 undefined,实参为 jQuery 和 window。

嗯?为什么没有为 undefined 对应地传入一个实参呢?这是一个小技巧,考虑到 undefined 这个变量名可能在其它地方的 JavaScript 代码赋过值,失去了它真正的意义,所以这里干脆不传入这个参数,以确保它在那个匿名自执行函数中是真正的 undefined。

jQuery 传入后对应为 $,这样可以保证插件内调用的 $ 一定是 jQuery 而非 Prototype 之类的库。

此类插件的调用方式一般为 $(selector).PluginName(); 这种形式。

此类具体示例可参考 https://github.com/libuchao/KTwitter
不基于选择器的插件

由于此类插件不依赖于选择器,所以也无链式操作一说。一般开发模式如下:

(function($, window, undefined) {
 $.PluginName = function(opts) {
 var defaults = {
  // 插件自定义选项的默认值
 };

 // 以用户的自定义选项覆盖默认选项
 var options = $.extend(defaults, opts || {});

 // 在这里编写插件功能代码
 };
})(jQuery, window);

此类插件的调用形式一般为 $(selector).PluginName(); 这种形式。

Javascript 相关文章推荐
执行iframe中的javascript方法
Oct 07 Javascript
网易JS面试题与Javascript词法作用域说明
Nov 09 Javascript
修改jquery.lazyload.js实现页面延迟载入
Dec 22 Javascript
js获得当前时区夏令时发生和终止的时间代码
Feb 23 Javascript
jQuery Real Person验证码插件防止表单自动提交
Nov 06 Javascript
Javascript从数组中随机取出不同元素的两种方法
Sep 22 Javascript
详解Vue组件之间的数据通信实例
Jun 17 Javascript
jQuery回调方法使用示例
Jun 26 jQuery
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 Javascript
慕课网题目之js实现抽奖系统功能
Sep 19 Javascript
VSCode中如何利用d.ts文件进行js智能提示
Apr 13 Javascript
在axios中使用params传参的时候传入数组的方法
Sep 25 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 #Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 #Javascript
基于jQuery实现动态数字展示效果
Aug 12 #Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 #Javascript
深入解读JavaScript中的Hoisting机制
Aug 12 #Javascript
Jquery代码实现图片轮播效果(一)
Aug 12 #Javascript
javascript表单验证大全
Aug 12 #Javascript
You might like
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
JS.findElementById()使用介绍
2013/09/21 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
Python理解递归的方法总结
2019/01/28 Python
Django框架实现的分页demo示例
2019/05/25 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
教师自荐书
2013/10/08 职场文书
办公室年终个人自我评价
2013/10/28 职场文书
大二自我鉴定
2014/01/31 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
优秀班组长事迹
2014/05/31 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
赞助商致辞
2015/07/30 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
css背景和边框标签实例详解
2021/05/21 HTML / CSS
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
利用Java连接Hadoop进行编程
2022/06/28 Java/Android