封装jQuery对象方法的插件

表格隔行变色插件

CSS部分:

.even{
background:#CCC;
}
.odd{
background:#666;
}
.selected{
background:#F90;
}

DOM结构:

<table id="table1">
<tbody>
<tr><th>选择</th><th>姓名</th><th>性别</th></tr>
<tr><td><input type="checkbox" checked="checked" /></td><td>小明</td><td>男</td></tr>
<tr><td><input type="checkbox" /></td><td>小花</td><td>女</td></tr>
<tr><td><input type="checkbox" /></td><td>小红</td><td>女</td></tr>
<tr><td><input type="checkbox" /></td><td>小华</td><td>男</td></tr>
</tbody>
</table>

插件部分:

;(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 isSelected=$(this).hasClass(options.selected);//返回布尔值,判断是否已被选中
//如果被选中就移出selected类,否则加上selected类
$(this)[isSelected?"removeClass":"addClass"](options.selected)//removeClass(myclass)或者addClass(myclass)
//查找内部的checkbox,设置对应的属性
.find(':checkbox').attr('checked',!isSelected);//v1.7.1正常,v1.11.1经测试在IE9及以上版本点击复选框外的地方,checkbox不能交替选择 });
});
//如果单选框默认情况下是选择的,则高亮
$('tbody>tr:has(:checked)',this).addClass(options.selected);
return this; //返回this,使方法可链
}
});
})(jQuery);

插件使用:

$("#table1").alterBgColor()                        //应用插件
.find("th").css("color","red"); //可以链式操作

封装jQuery全局函数的插件

去除左侧和右侧的空格

插件部分:

;(function($){
 $.extend({
  ltrim:function(text){
   return (text||"").replace(/^\s+/g,"");
  },
  rtrim:function(text){
   return (text||"").replace(/\s+$/g,"");
  }
 });
})(jQuery);

插件使用:

alert(jQuery.trim("  Hello  ")+jQuery.ltrim("   World")+jQuery.rtrim("!    "));

自定义选择器

jQuery的选择符解析器首先会使用一组正则表达式来解析选择器,然后针对解析出的每个选择符执行一个函数,称为选择器函数。最后根据这个选择器函数的返回值为true还是false来决定是否保留这个元素。这样就可以找到匹配的元素节点。

between选择器,如使用$("div:between(2,5)")能实现获取索引值为3、4元素的功能。

DOM结构:

<div style="background:red">0</div>
<div style="background:blue">1</div>
<div style="background:green">2</div>
<div style="background:yellow">3</div>
<div style="background:gray">4</div>
<div style="background:orange">5</div>

插件定义:

;(function($){
$.extend(jQuery.expr[":"],{
/*
     选择器仅仅是jQuery.expr[":"]对象的一部分,同时也是一个Object对象,因此可以直接利用jQuery.extend()对其扩展
a指向当前遍历到的DOM元素
i指的是当前遍历到的DOM元素的索引值,从0开始
m,由jQuery正则解析引擎进一步解析后的产物(用match匹配出来),是一个数组
以$("div:gt(1)")为例:
m[0],指:gt(1)
m[1],指":",即冒号。当然并非只能使用“:”后面跟上选择器,用户可以自定义其他的选择引导符
m[2],指gt,确定选择器选择器函数
m[3],指数字“1"
m[4],如果是div:l(ss(dd))这样一个选择器,m[4]指向(dd)这部分,注意是带括号的(dd),此时的m[3]的值是ss(dd)而非ss
*/
between:function(a,i,m){
var tmp=m[3].split(",");//将传递进来的m[3]以逗号为分隔符,切成一个数组
return tmp[0]<i&&i<tmp[1];
}
});
})(jQuery);

插件应用:

$(function(){
$("div:between(2,5)").css("background","white");//经测试jquery v1.11.1版本不支持
})

编写jQuery插件(三)——三个插件例子的更多相关文章

  1. 自己编写jQuery动态引入js文件插件 (jquery.import.dynamic.script)

    这个插件主要是结合jquery或者xhr异步请求来使用的,它可以把已经引入过的js文件记录在浏览器内存中,当下次再引入相同的文件就忽略该文件的引入. 此插件不支持浏览器刷新保存数据,那需要利用cook ...

  2. 如何编写JQuery 插件详解

    转载自:http://blog.sina.com.cn/s/blog_6154bf970101jam7.html 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jq ...

  3. 编写jquery插件的分享

    一.类级别($.extend) 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(o ...

  4. 编写jquery插件

    一.类级别($.extend) 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(o ...

  5. Cordova入门系列(三)Cordova插件调用 转发 https://www.cnblogs.com/lishuxue/p/6018416.html

    Cordova入门系列(三)Cordova插件调用   版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了cordova android项目是如何运行的,这一章我们介绍cordova的核心 ...

  6. 【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)

    之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...

  7. Android Studio 三种添加插件的方式,androidstudio

    前几篇blog我们介绍了如何安装和配置Android Studio,这篇Blog我们来聊聊如何给Android Studio添加插件,添加插件的路径有三种,我把他们分类如下: 点击设置小按钮 点击[P ...

  8. 编写jQuery插件--实现返回顶部插件

    国庆过去一周多了,作为IT界的具有严重’工作狂‘性质的宅人,居然还没走出玩耍的心情,拖了程序猿的脚后跟了.最近工作不顺,心情不佳,想吐槽下公司,想了还是厚道点,以彼之道还施彼身,觉得自己也和他们同流合 ...

  9. MyEclipse6.5安装SVN插件的三种方法

    MyEclipse6.5安装SVN插件的三种方法 方法一.如果可以上网可在线安装 1. 打开Myeclipse,在菜单栏中选择Help→Software Updates→Find and Instal ...

随机推荐

  1. node V8 的垃圾回收机制

    将变量设置为null意味着切断变量与它此前引用的值之间的连接.当垃圾收集器下次运行时,就会删除这些值并回收它们占用的内存.

  2. 【jmeter】jmeter之-聚合点

    集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户 ...

  3. IO测试工具之fio详解(转)

    http://www.cnblogs.com/raykuan/p/6914748.html 目前主流的第三方IO测试工具有fio.iometer和Orion,这三种工具各有千秋. fio在Linux系 ...

  4. C++ 常用函数方法

    /* * 拆分字符串 * 参数: * strData 字符串 * split 分隔符 * 返回: * 返回动态数组std::vector<std::string> ,记得要delete 内 ...

  5. Mysql 性能优化2 系统参数配置方法 和 文件系统

    --------------------------------------------目录------------------------------------------------- • 关于 ...

  6. 通过 CeSi + Supervisor 可视化集中管理服务器节点进程

    通过 CeSi + Supervisor 可视化集中管理服务器节点进程 简介 Supervisor 的安装及基本使用 1. 安装 2. 基本使用  2.1 启动 supervisor 2.2 Supe ...

  7. ThinkJava-持有对象

    11.3 添加一组元素 在java.util包中的Arrays和Collection类中都有很多实用方讼,可以在一个Collection中添加 一组元素.Arrays.asList()方法接受一个数组 ...

  8. java操作Excel之POI(3)

    一.字体处理 /** * 字体处理 */ public static void main(String[] args) throws Exception { Workbook wb = new HSS ...

  9. javascript callee和caller

    arguments的主要用途是保存参数,但是他还有callee属性. 一:callee指向arguments对象的函数. 示例一: function calture(num) {//阶乘计算 if ( ...

  10. stm32串口接收完整的数据包

    参考了文章:<stm32串口中断接收方式详细比较> 文章地址:http://bbs.elecfans.com/jishu_357017_1_1.html 借鉴了第四种中断方式 串口的配置这 ...