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 二维数组
Nov 26 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
Apr 27 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
js读取配置文件自写
Feb 11 Javascript
JS中数组重排序方法
Nov 11 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
纯js实现动态时间显示
Sep 07 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
jquery自定义组件实例详解
Dec 31 jQuery
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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
javascript动画浅析
2012/08/30 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
python 实现客户端与服务端的通信
2020/12/23 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
《满井游记》教学反思
2014/02/26 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
优秀英文求职信范文
2015/03/19 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
公司聚餐通知
2015/04/22 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
小爸爸观后感
2015/06/15 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android