申明:插件开发是实际项目就经常用到的,不过也是挺吃力的。笔者自己做项目时,看着我们老大写的jQuery一头桨糊,那叫个痛苦。后面果断买了本参考书以及浏览别人的博客,现在也算慢慢入门了。现在总结自己的一点理解,希望对大家有帮助。如果有错,希望大家一起交流,共同提高!
一、jQuery插件可以分为3种类型
- 封装对象方法的插件
- 封装全局函数的插件
- 选择器插件
二、封装对象方法的插件的书写形式
形式一:
(function($){
$.fn.extend({
pluginName:function(opt,callback){
//our plugin implementsation code goes here.
}
})
})(jQuery)
形式二:
(function($){
$.fn.pluginName=function(){http://i.cnblogs.com/?postid=3957061&update=1
//our plugin implementsation code goes here.
};
})
示例一:有jQuery名称空间下申明一个名字
$.fn.hilight=function(){
//our plugin implementation coode goes here
}
我们的插做的是通过这样可以调用
$('myDiv').hilight();
示例 二:接受options参数以控制插件的行为
让我们为我们的插件添加功能指定前景色和背景色的功能。我们也许会让选项像一个options对象传递给插件,如:
//plugin definition
$.fn.hilight=function(options){
var defaults={
frontGround:"red",
backGround: "yellow"
};
//extend our default options with those provided
var opts=$.extends(defaults,options);
//our plugin implementsation code goes here.
};
我们的插件可以这样被调用:
$("myDiv").hilight({
frontGround:"blue"
});
示例 三:暴露插件的默认设置
我们应当对上面代码的一种改进是暴露插件的默认设置。这对于让插件的使用者更容易用较少的代码覆盖和修改插件接下来我们开始利用函数对象。
//plugin definition
$.fn.hilight=function(options){
//extend our default options with those provided
//Note that the first arg to extnd is an empty object-
//this is to keep from overriding our "defaults" object.
var opts=$.extend({},$.fn.hilight.defaults,options);
//our plugin implementsation code goes here.
};
// plugin defaluts - added as a property on our plugin function
$.fn.hilights.defaluts={
frontGround:"red",
backGround:"yellow"
};
现在使用者可以包含像这样的一行在他们的脚本里:
//这个只需要调用一次,且不一定要在ready块中调用
$.fn.hilight.defaults.frontGround="blue";
接下来我们可以像这样使用插件的方法,结果它设置蓝色为前景色;
$("#myDiv").hilight();
如上,我们允许使用者写一行代码在修改的默认前景色。而且使用者仍然在需要的时候可以有选择的覆盖这些新的默认值:
//覆盖插件缺省的背景色
$.fn.hilight.defaults.frontGround="blue";
//使用一个新的缺省设置调用插件
$('.hilightDiv').hilight();
三、封装全局函数的插件
全局函数的插件可以理解为就是给jQuery类添加类方法,并且是静态的方法。就像$.ajax()和$.trim(),将函数定义于jQuery的命名空间中。他有如下几种形式:
形式一:添加单个全局函数
jQuery.myFoo=functin(){
alert("this is myFoo function")
};
形式二:添加多个全局函数
jQuery.myFoo=functin(){
alert("this is myFoo function")
};
jQuery.myFoo1=functin(param){
alert("this is myFoo1 function with a param " + param)
};
形式三:使用jQuery.extend(Object);
jQuery.myFoo1=functin(param){
alert("this is myFoo1 function with a param " + param)
};
jQuery.extend({
myFoo:function(){
alert("this is myFoo function")
},
myFoo1:function(param){
alert("this is myFoo1 function with a param " + param
}
});
形式四:使用命名空间
虽然在jQuery命名空间中,我们禁止使用了大量的javascript函数名和变量名,但是仍然不可避免某些函数或变量名将于其它的jQuery插件冲突,所以我们选择将一些方法封装到另一个命名空间下。
jQuery.myPlugin={
myFoo:function(){
alert("this is myFoo function")
}
myFoo1:function(param){
alert("this is myFoo1 function with a param " + param)
}
}
采用命名空间的函数仍然是全局函数,调用时采用的方法:
$.myPlugin.myFoo();
$.myPlagin.myFoo1("rah");
锋利的Jquery解惑系列(二)------插件开发大总结的更多相关文章
-
锋利的Jquery解惑系列(三)------ 各路选择器大聚会
申明:初次学习Jquery的选择器时只记得几个和css选择器类似的几个,在这里列出书上写上的各路选择器方便以后的查询和现在的学习 所有例子都来自书上 测试画面: 一.基本选择器 #id, $(&quo ...
-
锋利的Jquery解惑系列(一)------基本概念大锅炖
声明:虽然是基本概念但也是笔者经过一番学习才总结的这些文章,所以他不包括Jquery优缺点.特点.语法的介绍. 概念一:jQuery对像与DOM对象 DOM(Document Object Model ...
-
[jQuery学习系列二 ]2-JQuery学习二-数组操作
前言 上一篇内容 已经对于Jquery 有了一些认识, 包括Jquery的选择器和DOM对象, 那么这一篇继续来看下Jquery中很实用的Jquery对于数组的操作. Jquery中对数组的操作大致有 ...
-
Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...
-
Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】
<Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
-
Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】
<Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
-
Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】
<Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
-
jQuery下拉框操作系列$(";option:selected";,this) &;&;(锋利的jQuery)
jQuery下拉框操作系列$("option:selected",this) &&(锋利的jQuery) <!DOCTYPE html> <ht ...
-
Jquery全选系列操作(锋利的jQuery)
Jquery全选系列操作(锋利的jQuery) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...
随机推荐
-
利用Oracle创建数据库
本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217151.html 数据库的创建 打开"所有程序"-" ...
-
新版Chrome自动禁用第三方插件的解决办法[转]
原文地址:http://www.douban.com/note/375734834/?type=like Chrome的新策略里面禁用了除chrome web store下载的所有第三方扩展,这个很烦 ...
-
开放-封闭原则(OCP)
对于僵化性的臭味,应用OCP原则之后,再进行同样的改动时,只需添加新代码,而不必改动已正常运行的代码. 扩展模块行为的方式通常是修改模块的Code,不允许修改的模块常常被认为是具有固定的行为. Ope ...
-
back_insert_iterator和iterator用起来不一样。
先看代码: #include<iostream> #include<vector> #include<algorithm> #include<iterator ...
-
kafka 集群搭建
环境:ubuntu14.04 版本:jdk1.8,zookeeper 3.4.10,kafka 2.11 搭建步骤: 1. 搭建zookeeper集群 参考链接:zookeeper集群搭建 2. 下载 ...
-
T-2-java面向对象
一.类 类对象的数据结构定义,方法是对象的行为. 类是数据类型. 一个类可以创建多个对象,这多个对象结构相同,数据不同. 类中可以包含:(1)成员变量(对象的共同特征,静的):(2)方法(对象的共同行 ...
-
css3 的新属性
1,动画,animate------>//动画-名称-动画的时间间隔-以什么方式播放-循环 .right{ animate:dropdown 4px 5px #000; // x的偏移值 y的偏 ...
-
C++ 调用 opencv 读取视频文件列表并处理
//g++ trans_video.cpp -o trans_video `pkg-config opencv --libs --cflags` -L/usr/lib/x86_64-linux-gnu ...
-
CodeForces 1062E Company
Description The company \(X\) has \(n\) employees numbered from \(1\) through \(n\). Each employee \ ...
-
算法笔记_129:计数排序(Java)
目录 1 问题描述 2 解决方案 2.1比较计数排序 2.2 分布计数排序 1 问题描述 给定一组数据,请使用计数排序,得到这组数据从小到大的排序序列. 2 解决方案 2.1比较计数排序 下面算法 ...