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 相关文章推荐
jValidate 基于jQuery的表单验证插件
Dec 12 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
Mar 04 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
Dec 29 Javascript
Bootstrap栅格系统学习笔记
Nov 25 Javascript
Vue.js中用v-bind绑定class的注意事项
Dec 13 Javascript
微信小程序 tabs选项卡效果的实现
Jan 05 Javascript
vue引入js数字小键盘的实现代码
May 14 Javascript
vue组件jsx语法的具体使用
May 21 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
vue 判断元素内容是否超过宽度的方式
Jul 29 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
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
python实现12306火车票查询器
2017/04/20 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
python内置数据类型之列表操作
2018/11/12 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
经济管理自荐书
2014/06/09 职场文书
班子四风对照检查材料
2014/08/21 职场文书
材料员岗位职责
2015/02/10 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL