编写jQuery插件(三)——三个插件例子
封装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插件(三)——三个插件例子的更多相关文章
- 自己编写jQuery动态引入js文件插件 (jquery.import.dynamic.script)
这个插件主要是结合jquery或者xhr异步请求来使用的,它可以把已经引入过的js文件记录在浏览器内存中,当下次再引入相同的文件就忽略该文件的引入. 此插件不支持浏览器刷新保存数据,那需要利用cook ...
- 如何编写JQuery 插件详解
转载自:http://blog.sina.com.cn/s/blog_6154bf970101jam7.html 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jq ...
- 编写jquery插件的分享
一.类级别($.extend) 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(o ...
- 编写jquery插件
一.类级别($.extend) 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(o ...
- Cordova入门系列(三)Cordova插件调用 转发 https://www.cnblogs.com/lishuxue/p/6018416.html
Cordova入门系列(三)Cordova插件调用 版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了cordova android项目是如何运行的,这一章我们介绍cordova的核心 ...
- 【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)
之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...
- Android Studio 三种添加插件的方式,androidstudio
前几篇blog我们介绍了如何安装和配置Android Studio,这篇Blog我们来聊聊如何给Android Studio添加插件,添加插件的路径有三种,我把他们分类如下: 点击设置小按钮 点击[P ...
- 编写jQuery插件--实现返回顶部插件
国庆过去一周多了,作为IT界的具有严重’工作狂‘性质的宅人,居然还没走出玩耍的心情,拖了程序猿的脚后跟了.最近工作不顺,心情不佳,想吐槽下公司,想了还是厚道点,以彼之道还施彼身,觉得自己也和他们同流合 ...
- MyEclipse6.5安装SVN插件的三种方法
MyEclipse6.5安装SVN插件的三种方法 方法一.如果可以上网可在线安装 1. 打开Myeclipse,在菜单栏中选择Help→Software Updates→Find and Instal ...
随机推荐
- Linux elasticsearch 安装 遇到的问题
备注:我的 Linux 测试机 是2G 内存的 ,估计内存小于 我的内存肯定会出这个问题 .(安装的最新版6.3.2) 1. 下载文件 解压 2 .试着 运行 bin 下面的 elasticse ...
- 用exec调用带有output输出参数的存储过程
用exec调用带有output输出参数的存储过程,想要得到输出参数的值,必须在调用参数后面加output关键字,如: declare @value int exec up_test 2,3,@v ...
- couldn't launch the emulator make sure the sdk directory is properly setup
android sdk 路径中不能有空格.转到一个没有空格的文件夹下即可.
- linux下maven项目clean失败
今天在linux下创建了一个项目自动化发布的脚本,在执行到 mvn clean package -Dmaven.test.skip=true 的时候,项目clean失败 查下下度娘,windows下导 ...
- maven学习(6)-Maven依赖范围
一.maven依赖范围: classpath 分为三种:编译classpath , 测试classpath , 运行classpath Scope 选项如下: Compile:编译依赖范围.默认就是c ...
- python 笔记 2017
26.反斜杠用处,断言一些字符包含特殊字符的 if "<h3 class=\"entH 22222setH\">刷新成功</h3>" i ...
- EasyMall 项目记录-环境搭建
一.搭建项目运行的环境 (1)修改hosts文件 更改:C:\Windows\System32\drivers\etc目录下hosts文件 添加:127.0.0.1 www.easyma ...
- RDD之二:原理
RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使 ...
- jstack可以定位到线程堆栈
java命令--jstack 工具 JVM调优之jstack找出最耗cpu的线程并定位代码 jstack可以定位到线程堆栈,根据堆栈信息我们
- sed简单用法
参数说明: -e 以指定的script来处理输入的文本文件 -f 以指定的script文件来处理输入的文本文件 -h 显示帮助 -n 仅显示script处理后的结果 -V 显示版本信息 -v 反选 动 ...