目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件。这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率。

jQuery插件的类型:

  • 封装对象方法的插件

    • 大部分jQuery的插件都属于这种,对获取的jQuery对象进行操作
  • 封装全局函数的插件
    • 可以理解为$.ajax这种就是封装的全局函数
  • 选择器插件
    • 顾名思义,封装的选择器

jQuery插件的基本要点:

  • jQuery插件的文件名推荐为:jquery.[插件名].js,以免和其它js库插件混淆。
  • 所有对象方法应该附加到jQuery.fn对象上,所有全局方法应该附加到jQuery对象本身上。
  • 在插件内部,this指向的是当前获取的jQuery对象,而不是DOM元素
  • 可以通过this.each来遍历所有元素
  • 插件应该返回一个jQuery对象,以保证插件的可链式操作。
  • 避免在插件内部使用$,而应该使用完整的jQuery。当然也可以用闭包的技巧来回避这个问题。
    (function($){
    //此处编写jQuery插件代码,这种闭包玩法就不在这里解释了,我前面的js基础系列写过了,不懂的请转到这个地址看看http://www.cnblogs.com/vvjiang/p/5143852.html。在此篇文章最后的部分就是。
    })(jQuery);

jQuery插件的机制:

jQuery提供了两个用于扩展jQuery功能的插件,即jQuery.fn.extend()方法和jQuery.extend()方法。

前者实现封装对象方法的插件,后者实现封住选择器插件和全局函数插件。

jQuery.extend()除了用于扩展jQuery对象之外,还可以扩展已经存在的object对象,所以经常被用于设置插件方法的一系列默认参数。如:

    function myFunc(options){
options=jQuery.extend({
name:"bar",
length:1
},options);
}
myFunc({name:"asd"});//此时函数调用后options的name为asd,length为1

编写jQuery插件

  • 封装jQuery对象方法的插件

    • 那就举个表格隔行变色的例子

      (function($){
      $.fn.extend({
      "alterBgColor":function(options){
      options=$.extend({//设置默认参数
      odd:"odd",/*偶数行样式*/
      even:"even", /*奇数行样式*/
      selected:"selected"/*选中行样式*/
      },options);
      $("tbody>tr:odd",this).addClass(options.odd);
      $("tbody>tr:even",this).addClass(options.even);
      $("tbody>tr",this).click(function(){
      var hasSelected=$(this).hasClass(options.selected);
      $(this)[hasSelected?"removeClass":"addClass"](options.selected)
      .find(":checkbox").attr('checked',!hasSelected);
      });
      $("tbody>tr:has(:checked)",this).addClass(options.selected);
      return this;//返回this,支撑链式操作
      }
      });
      })(jQuery);
      $("tbody>tr:odd",this)这种用法在加上第二个参数this后,第一个参数的选择器就只会在this这个对象下进行筛选。
  • 封装全局函数的插件
    • 去除左空白字符和去除右空白字符的插件例子:

      (function($){
      $.extend({
      ltrim:function(text){
      return (text||"").replace(/^\s+/g,"");
      },
      rtrim:function(text){
      return (text||"").replace(/\s+$/g,"");
      }
      });
      })(jQuery);
  • 自定义选择器的插件
    • 选择索引介于两个数中间的元素的选择器插件例子:

      (function($){
      $.extend(jQuery.expr[":"],{
      between:function(a,i,m){//选择器函数
      //a指向的是当前遍历到的DOM元素
      //i指的是当前遍历到的DOM元素的索引值
      //m最为特别,它是由jQuery正则解析引擎进一步解析后的产物,是一个数组
      //这里只讲m[3],比如选择器:gt(2)那么m[3]就为2,如果是多个,那么就是"2,5"这种以逗号分隔的参数字符串
      var tmp=m[3].split(",");//以逗号为分隔符,切成一个数组
      return tmp[0]-0<i&&i<tmp[1]-0;//这里用-0可以将字符串转换为数字
      }
      });
      })(jQuery);
      $("div:between(2,5)")

【jQuery基础学习】08 编写自定义jQuery插件的更多相关文章

  1. jQuery基础学习2——DOM和jQuery对象

    <body> <h3>例子</h3> <p title="选择你最喜欢的水果." >你最喜欢的水果是?</p> < ...

  2. JQuery基础学习总结

    JQuery基础学习总结 简单总结下JQuery: 一:事件 1.change事件 <!DOCTYPE html> <html lang="en"> < ...

  3. 【jQuery基础学习】00 序

    作为一个从来没有认真学过jQuery的菜来讲,我所学的都是jQuery基础. 算是让自己从0开始系统学一遍吧.学习书籍为:<锋利的jQuery>. 虽然是个序,表示一下我是个菜,但还是来几 ...

  4. Android+Jquery Mobile学习系列(2)-HTML5/Jquery Mobile基础

    本章介绍两个关键字[HTML5]和[Jquery Mobile],简单说这两者的关系是:HTML5作为主体,Jquery Mobile在HTML5的基础上对其进行了优化.装饰. HTML5 HTML5 ...

  5. jQuery基础学习

    一.简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是“Write ...

  6. 三、jQuery--jQuery基础--jQuery基础课程--第9章 jQuery 常用插件

    1.表单验证插件——validate 该插件自带包含必填.数字.URL在内容的验证规则,即时显示异常信息,此外,还允许自定义验证规则,插件调用方法如下:$(form).validate({option ...

  7. 【jQuery基础学习】11 jQuery性能简单优化

    关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的.如果这样不能直接找到,也可以用find方法继续查找 $("p")标签选择器也是直 ...

  8. 【jQuery基础学习】09 jQuery与前端(这章很水)

    这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的. 关于网站结构 文件结构 前端文件分三个文件夹放 images文件夹用来存放将要用到的图 ...

  9. jQuery基础学习(一)—jQuery初识

    一.jQuery概述 1.jQuery的优点      jQuery是一个优秀的JavaScript库,极大地简化了遍历HTML文档.操作DOM.处理事件.执行动画和开发Ajax的操作.它有以下几点优 ...

随机推荐

  1. Homebrew

    Homebrew官网:http://brew.sh Homebrew installs the stuff you need that Apple didn't Homebrew的安装非常简单,打开终 ...

  2. Erwin 生成 mysql 带注释(comment )的脚本

    Erwin设计数据库非常方便,有逻辑视图和物理视图,可以很方便的生成数据库文档和SQL 脚本.在使用过程中唯一不爽的地方是脚本不能生成comment.   在百度无数次无法解决下,又FQ谷歌,在一个日 ...

  3. 在spring,mybatis整合配置中走的弯路(1)

    在接触一个新东西,总免不了走一些弯路,也正是在这些弯路中,我们不断的成长. 从git上把之前写的代码扒下来,看看我在当初使用spring与mybatis中所走的弯路,路过的君子也可引以为戒. < ...

  4. [原创]Android从xml加载到View对象过程解析

    我们从Activity的setContentView()入手,开始源码解析, //Activity.setContentView public void setContentView(int layo ...

  5. Android中用layer-list编写阴影效果

    要实现这种效果当然有多 种方式,比如背景图片直接加阴影效果,或者用代码画一个(onDraw()).这次我们直接用layer-list来实现.在项目 res->drawable中创建一个xml,如 ...

  6. WinFrom 登录窗体 密码保存效果

    WinFrom 登录窗体 保存密码效果 开发CS程序的程序员都会遇到 今天突然想把这个功能加到我的项目中 之后总结下 不多说 上图   如果关闭程序 下次在登录的时候 用户名.密码会自动保留下来  一 ...

  7. 配置NAT回流导致外网解析到了内网IP

    单位有3个域名,用量很大,2014年开始本人研究部署了Bind+DLZ +Mysql的三机智能多链路DNS,非常好用,优点是: 1.使用Mysql管理记录,配置.管理.查询方便. 2.自动判断运营商, ...

  8. LeetCode:5_Longest Palindromic Substring | 最长的回文子串 | Medium

    题目: Given a , and there exists one unique longest palindromic substring. 解题思路:1.简单思路:暴力破解法,时间复杂度O(n^ ...

  9. Xenia and Bit Operations(线段树单点更新)

    Xenia and Bit Operations time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  10. 注意啦!10 个你需要了解的 Linux 网络和监控命令

    下面列出来的10个基础的每个Linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些:hostname, ping, ifconfig, iwconfig, netstat, nslooku ...