【jQuery基础学习】08 编写自定义jQuery插件
目的:虽然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插件的更多相关文章
- jQuery基础学习2——DOM和jQuery对象
<body> <h3>例子</h3> <p title="选择你最喜欢的水果." >你最喜欢的水果是?</p> < ...
- JQuery基础学习总结
JQuery基础学习总结 简单总结下JQuery: 一:事件 1.change事件 <!DOCTYPE html> <html lang="en"> < ...
- 【jQuery基础学习】00 序
作为一个从来没有认真学过jQuery的菜来讲,我所学的都是jQuery基础. 算是让自己从0开始系统学一遍吧.学习书籍为:<锋利的jQuery>. 虽然是个序,表示一下我是个菜,但还是来几 ...
- Android+Jquery Mobile学习系列(2)-HTML5/Jquery Mobile基础
本章介绍两个关键字[HTML5]和[Jquery Mobile],简单说这两者的关系是:HTML5作为主体,Jquery Mobile在HTML5的基础上对其进行了优化.装饰. HTML5 HTML5 ...
- jQuery基础学习
一.简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是“Write ...
- 三、jQuery--jQuery基础--jQuery基础课程--第9章 jQuery 常用插件
1.表单验证插件——validate 该插件自带包含必填.数字.URL在内容的验证规则,即时显示异常信息,此外,还允许自定义验证规则,插件调用方法如下:$(form).validate({option ...
- 【jQuery基础学习】11 jQuery性能简单优化
关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的.如果这样不能直接找到,也可以用find方法继续查找 $("p")标签选择器也是直 ...
- 【jQuery基础学习】09 jQuery与前端(这章很水)
这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的. 关于网站结构 文件结构 前端文件分三个文件夹放 images文件夹用来存放将要用到的图 ...
- jQuery基础学习(一)—jQuery初识
一.jQuery概述 1.jQuery的优点 jQuery是一个优秀的JavaScript库,极大地简化了遍历HTML文档.操作DOM.处理事件.执行动画和开发Ajax的操作.它有以下几点优 ...
随机推荐
- Java Arrays 排序
Java SDK中的排序分为两种情况: .对基础类型数组的排序,使用DualPivotQuicksort类 a.如果是对char.short数组的排序,因为byte.char.short分别为8bit ...
- Show in Finder OC代码
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:urls]; /* Activate the Finder, and op ...
- 条件注释判断IE浏览器
最近在用jquery 2.0 才知道已不支持IE6/7/8 但又不想换回 jquery 1.X; 找了一资料发现条件注释可以解决这个问题 这个也像程序中的条件判断,先来介绍几个单词lt :Less t ...
- 使用hexo在github上写blog
使用hexo在github上写blog 安装nodejs http://nodejs.org/ 安装hexo npm install -g hexo 创建bolg文件夹 安装完成后在自己的工作目录创建 ...
- Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题
1 设置中文显示环境 1. 打开System Settings 2. 打开Personal-> Language Support. 会弹出如下对话框,提示你“语言支持没安装完整”. 点击“Rem ...
- apache 配置反向代理服务器
前几天实验了下 nginx 配置反向代理服务器.虽然 nginx 的安装很麻烦,但是用起来倒是很简单.不过组里没人用过 nginx,apache 服务器大家倒是蛮熟,为了减少 ops team 的工作 ...
- Python基本语句
x = 1 y = 1 dataf = 1.0 def fun1(): print("fun1") class ClassB(): def __init__(self): prin ...
- wireshark解密本地https流量笔记
此方式支持firefox,chrome 建立path变量 SSLKEYLOGFILE=c:\ssl.key 重启firefox chrome,访问https网站会自动生成ssl session key ...
- Java-基本的程序设计结构
Java-基本的程序设计结构 >注释 Java的注释分为三种情况 第一种://开头 第二种:"/*" 开头 "*/"结尾 上面两种情况跟C#.C++.Ob ...
- HTML5[3]:中文换行
保证中文每行第一个字,不会出现标点符号 p { white-space: pre-wrap; }