封装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. ThinkPHP 5 insertall 只插入最后一条数据的问题

    问题来源: Steed 2018/1/5 11:30:25 @流年 我用fetchsql查看的sql,发现数据都是最后一条 Steed 2018/1/5 11:30:39 我也不知道是什么问题,我打印 ...

  2. [脚本] 一个用于BMP到EPS转换的BAT脚本实现(需要安装bmeps)

    最近用LaTeX写文章, 图片需要使用eps格式. 如果你安装了bmeps这个工具(一般你装了CTeX就自带这个工具的), 可以在需要转换的目录打开CMD窗口, 然后输入: bmeps -c a.jp ...

  3. 【转】每天一个linux命令(52):ifconfig命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/02/27/2934525.html 许多windows非常熟悉ipconfig命令行工具,它被用来获取网 ...

  4. Spring Boot 整合 FastDFS 客户端

    原文地址:Spring Boot 整合 FastDFS 客户端 博客地址:http://www.extlight.com 一.前言 前两篇介绍整体上介绍了通过 Nginx 和 FastDFS 的整合来 ...

  5. 【linux】Linux 进程状态

    linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有 ...

  6. 【jmeter】jmeter测试手机app的服务器压力

    具体步骤: 1.电脑启动jmeter 2.jmeter在测试计划新建线程组. 3.在工作台新建http代理服务器 4.配置HTTP代理服务器 5.设置IE代理到本地 6.手机wifi设置代理连接到PC ...

  7. 终于完成了 源码 编译lnmp环境

    经过了大概一个星期的努力,终于按照海生的编译流程将lnmp环境源码安装出来了 nginx 和php 主要参考 http://hessian.cn/p/1273.html mysql 主要参考 http ...

  8. 【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat

    作者:ssslinppp       1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC ...

  9. 用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境

    作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...

  10. 基于jQuery.i18n.properties实现前端网站语言多版本

    我是参考播客做了个demo:http://blog.csdn.net/aixiaoyang168/article/details/49336709 jQuery.i18n.properties采用.p ...