jQuery定义插件的方法


Posted in Javascript onDecember 18, 2015

有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery。我曾经也是这样的人,直到有一次公司里的技术交流,我才改变了自己对自己的看法。

扩展jquery的时候。最核心的方法是以下两种:

$.extend(object) 可以理解为jquery添加一个静态方法

$.fn.extend(object) 可以理解为jquery实例添加一个方法

$.extend(object)

 例子:

/* $.extend 定义与调用
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
$.extend({ fun: function () { alert("执行方法一"); } });//定义
$.fun();//调用
$.fn.extentd(object)
/* $.fn.extend 定义与调用
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
$.fn.extend({ fun: function () { alert("执行方法"); } });
$(this).fun();
//等同于
$.fn.fun = function () { alert("执行方法三"); }
$(this).fun();

定义jquery插件的基本结构

1.  定义作用域:

为插件定义一个私有作用域。外界代码不能直接访问插件内部。插件内部代码不受外界干扰,也不会污染到全局变量。

//step 定义JQuery的作用域
(function ($) {
})(jQuery);

2. 为插件添加扩展方法:

//step01 定义JQuery的作用域
(function ($) {
  //step02 插件的扩展方法名称
  $.fn.easySlider = function (options) {
    
  }
})(jQuery);

3. 设置默认值:

//step 定义JQuery的作用域
(function ($) {
  //step-a 插件的默认值属性
  var defaults = {
    prevId: ‘prevBtn‘,
    prevText: ‘Previous‘,
    nextId: ‘nextBtn‘,
    nextText: ‘Next‘
    //……
  };
  //step 插件的扩展方法名称
  $.fn.easySlider = function (options) {
    //step-b 合并用户自定义属性,默认属性
    var options = $.extend(defaults, options);
  }
})(jQuery);

其中:var options = $.extend(defaults, options)的含义了。表示 options 去覆盖了defaults的值,并把值赋给了options。
在插件环境中,就表示用户设置的值,覆盖了插件的默认值;如果用户没有设置默认值的属性,还是保留插件的默认值。

4. 支持jquery选择器:    

//step 定义JQuery的作用域
(function ($) {
  //step-a 插件的默认值属性
  var defaults = {
    prevId: ‘prevBtn‘,
    prevText: ‘Previous‘,
    nextId: ‘nextBtn‘,
    nextText: ‘Next‘
    //……
  };
  //step 插件的扩展方法名称
  $.fn.easySlider = function (options) {
    //step-b 合并用户自定义属性,默认属性
    var options = $.extend(defaults, options);
    //step 支持JQuery选择器
    this.each(function () {
    });
  }
})(jQuery);

5 .支持JQuery的链接调用:

为了能达到链接调用的效果必须要把循环的每个元素return

//step 定义JQuery的作用域
(function ($) {
  //step-a 插件的默认值属性
  var defaults = {
    prevId: ‘prevBtn‘,
    prevText: ‘Previous‘,
    nextId: ‘nextBtn‘,
    nextText: ‘Next‘
    //……
  };
  //step 插件的扩展方法名称
  $.fn.easySlider = function (options) {
    //step-b 合并用户自定义属性,默认属性
    var options = $.extend(defaults, options);
    //step 支持JQuery选择器
    //step 支持链式调用
    return this.each(function () {
    });
  }
})(jQuery);

6. 插件里的方法:

在插件里定义的方法,外界不能直接调用,我在插件里定义的方法也没有污染外界环境。

//step01 定义JQuery的作用域
(function ($) {
  //step03-a 插件的默认值属性
  var defaults = {
    prevId: ‘prevBtn‘,
    prevText: ‘Previous‘,
    nextId: ‘nextBtn‘,
    nextText: ‘Next‘
    //……
  };
  //step06-a 在插件里定义方法
  var showLink = function (obj) {
    $(obj).append(function () { return "(" + $(obj).attr("href") + ")" });
  }
  //step02 插件的扩展方法名称
  $.fn.easySlider = function (options) {
    //step03-b 合并用户自定义属性,默认属性
    var options = $.extend(defaults, options);
    //step4 支持JQuery选择器
    //step5 支持链式调用
    return this.each(function () {
      //step06-b 在插件里定义方法
      showLink(this);
    });
  }
})(jQuery);

通过以上内容给大家介绍了jQuery定义插件的方法,希望大家喜欢。

Javascript 相关文章推荐
可以支持多中格式的JS键盘
May 02 Javascript
javascript 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
Sep 25 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
Aug 24 Javascript
Vue.js实现微信过渡动画左右切换效果
Jun 13 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
微信小程序版本自动更新的方法
Jun 14 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
Nov 03 Javascript
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
jQuery Validate插件实现表单强大的验证功能
Dec 18 #Javascript
jquery实现二级导航下拉菜单效果
Dec 18 #Javascript
学习jQuey中的return false
Dec 18 #Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 #Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 #Javascript
javascript实现保留两位小数的多种方法
Dec 18 #Javascript
原生js实现图片轮播特效
Dec 18 #Javascript
You might like
PHP 批量删除 sql语句
2009/06/05 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
PHP强制转化的形式整理
2020/05/22 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Python创建xml的方法
2015/03/10 Python
python实现简单ftp客户端的方法
2015/06/28 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
房地产项目策划书
2014/02/05 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书