【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的操作.它有以下几点优 ...
随机推荐
- .net微信公众号开发——模板消息
作者:王先荣 本文介绍微信公众号中的模板消息,包括以下内容:(1)TemplateMessage类简介:(2)设置所属行业:(3)获得模板id:(4)发送模板消息:(5)接收推送模板消息发送结果 ...
- IT Operations(IT 运营),运维的更价值化认识
一直想努力向别人(甚至包括从事运维的人)解释清楚什么是运维,发现很难! 6月20号,在InfoQ高效运维群里面,对运维创业做了一次激烈的讨论,很自然地,过程中不可避免的谈到运维苦逼和运维无法产品化的问 ...
- MassTransit_契约的创建
消息契约的命名规范 命令模式:动词+对象 事件模式:对象+动词 不同模式下要求不同的主键 Creating a message contract In MassTransit, a message c ...
- jquerymobile标签-属性手册
Button data-role="button" data-corners true | false data-icon home | delete | plus | arr ...
- windows 程序设计自学:添加图标资源
#include <windows.h> #include "resource.h" LRESULT CALLBACK MyWndProc( HWND hwnd, // ...
- 让mingw gdb支持STL,并自动load .gdbinit
环境要求:python (2.7版本可以,3.x没测过),mingw官方版(你可能已经有了),gdb2013-02-04(到这里https://code.google.com/p/qp-gcc/dow ...
- EDM博主笔记:EDM邮件营销的几个细节问题
其实说起EDM邮件营销很多做过的人都知道,目前国内邮件营销的效果其实是比较差的,为什么?因为国内没有多少使用邮件的习惯,如果不是工作所需估计很多的人都几天不碰邮件了,但是反观国外 邮件是其日常的一部分 ...
- 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)
9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多 ...
- 云极知客开放平台接口调用方法(C#)
云极知客为企业提供基于SAAS的智能问答服务.支持企业个性化知识库的快速导入,借助语义模型的理解和分析,使企业客户立即就拥有本行业的24小时客服小专家.其SAAS模式实现零成本投入下的实时客服数据的可 ...
- python 字符串查找
python 字符串查找有4个方法,1 find,2 index方法,3 rfind方法,4 rindex方法. 1 find()方法: )##从下标1开始,查找在字符串里第一个出现的子串:返回结果3 ...