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 相关文章推荐
Javascript new Date().valueOf()的作用与时间戳由来详解
Apr 24 Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
angular简介和其特点介绍
Jan 29 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
Jul 01 Javascript
JS获取当前页面名称的简单实例
Aug 19 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
Jan 08 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
vue.js中mint-ui框架的使用方法
May 12 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 Javascript
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
vue-cli3+typescript初体验小结
Feb 28 Javascript
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
支持oicq头像的留言簿(一)
2006/10/09 PHP
默默简单的写了一个模板引擎
2007/01/02 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
简单的php文件上传(实例)
2013/10/27 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
python连接mysql调用存储过程示例
2014/03/05 Python
python中pycurl库的用法实例
2014/09/30 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
拾金不昧的表扬信
2014/01/16 职场文书
班级安全教育实施方案
2014/02/23 职场文书
九九重阳节致辞
2015/07/31 职场文书