jquery插件开发,jquery拥有成熟插件
jquery 简介
JQuery是继prototype之后又一个优秀的Javascript库。它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需要定义id即可。
错那网站建设公司创新互联,错那网站设计制作,有大型网站制作公司丰富经验。已为错那成百上千提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的错那做网站的公司定做!
jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。
jQuery是免费、开源的,使用MIT许可协议。jQuery的语法设计可以使开发更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。
jQuery,顾名思义,也就是JavaScript和查询(Query),即是辅助JavaScript开发的库。
历史
大概在 1992 年,一家称作 Nombas 的公司开发了一种叫做 C 减减(C-minus-minus,简称 Cmm)的嵌入式脚本语言。Cmm 背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与 C (和 C ++)足够的相似性,以便开发人员能很快学会。这个脚本语言捆绑在一个叫做 CEnvi 的共享软件中,它首次向开发人员展示了这种语言的威力。
Nombas 最终把 Cmm 的名字改成了 ScriptEase,原因是后面的部分(mm)听起来过于消极,同时字母 C “令人害怕”。
当 Netscape Navigator 崭露头角时,Nombas 开发了一个可以嵌入网页中的 CEnvi 的版本。这些早期的试验被称为 Espresso Page(浓咖啡般的页面),它们代表了第一个在万维网上使用的客户端语言。而 Nombas 丝毫没有料到它的理念将会成为万维网的一块重要基石。
当网上冲浪越来越流行时,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过 28.8 kbit/s 的调制解调器连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器进行多次地往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了 30 秒的处理后,看到的却是一条告诉你忘记填写一个必要的字段。
那时正处于技术革新最前沿的 Netscape,开始认真考虑开发一种客户端脚本语言来解决简单的处理问题。
当时工作于 Netscape 的 Brendan Eich,开始着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。Netscape 与 Sun 及时完成 LiveScript 实现。
就在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其更名为 JavaScript,目的是为了利用 Java 这个因特网时髦词汇。Netscape 的赌注最终得到回报,JavaScript 从此变成了因特网的必备组件。
因为 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中发布了 1.1 版。恰巧那个时候,微软决定进军浏览器,发布了 IE 3.0 并搭载了一个 JavaScript 的克隆版,叫做 JScript(这样命名是为了避免与 Netscape 潜在的许可纠纷)。微软步入 Web 浏览器领域的这重要一步虽然令其声名狼藉,但也成为 JavaScript 语言发展过程中的重要一步。
在微软进入后,有 3 种不同的 JavaScript 版本同时存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。与 C 和其他编程语言不同的是,JavaScript 并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。
2006年1月,jQuery的第一个版本面世,至今已经有10年多了(注:这个时间点是截止至出书时间)。虽然过了这么久,但它依然以其简洁、灵活的编程风格让人一见倾心。在本篇文章中,我们将讲述jQuery的发展 历史 ,让读者对jQuery有更多的了解。
在jQuery迅速发展的同时,一些大的厂商也看中了商机。2009年9月,微软和诺基亚公司正式宣布支持开源的jQuery库,另外,微软公司还宣称他们将把jQuery作为Visual Studio工具集的一部分。他将提供包括jQuery的智能提示、代码片段、示例文档编制等内容在内的功能。微软和诺基亚公司将长期成为jQuery的用户成员,其他成员还有Google,Intel,IBM,Intuit等公司。
2009年1月,jQuery 1.3版发布,它使用了全新的选择符引擎Sizzle,在各个浏览器下全面超越其他同类型JavaScript框架的查询速度,程序库的性能也因此有了极大提升。这一版本的第2个变化就是提供live()方法,使用live()方法可以为当前及将来增加的元素绑定事件,在1.3版之前,如果要为将来增加的元素绑定事件,需要使用livequery插件,而在1.3版中,可以直接用live()方法。 2005年8月,John Resig提议改进Prototype的“Behaviour”库,于是他在blog上发表了自己的想法,并用了3个例子做说明。
2010年2月,jQuery 1.4.2版发布,它新增了有关事件委托的两个方法:delegate()和undelegate()。delegate()用于替代1.3.2中的live()方法。这个方法比live()来的方便,而且也可以达到动态添加事件的作用。比如给表格的每个td绑定hover事件
特点
1.动态特效
2.AJAX
3.通过插件来扩展
4.方便的工具 - 例如浏览器版本判断
5.渐进增强
6.链式调用
7.多浏览器支持,支持Internet Explorer6.0+、Opera9.0+、Firefox2+、Safari2.0+、Chrome1.0+(在2.0.0中取消了对Internet Explorer6,7,8的支持)
历史 版本
jQuery 1.0
(2006年8月):该库的第一个稳定版本,已经具有了对CSS选择符、事件处理和AJAX交互的稳健支持。
jQuery 1.1
(2007年1月):这一版大幅简化了API。许多较少使用的方法被合并,减少了需要掌握和解释的方法数量。
jQuery 1.1.3
(2007年7月):这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始,jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。
jQuery 1.2
(2007年9月):这一版去掉了对XPath选择符的支持,原因是相对于CSS语法它已经变得多余了。这一版能够支持对效果的更灵活定制,而且借助新增的命名空间事件,也使插件开发变得更容易。
jQuery UI(2007年9月):这个新的插件套件是作为曾经流行但已过时的Interface插件的替代项目而发布的。jQuery UI中包含大量预定义好的部件(widget),以及一组用于构建高级元素(例如可拖放的界面元素)的工具。
jQuery 1.2.6
(2008年5月):这一版主要是将Brandon Aaron开发的流行的Dimensions插件的功能移植到了核心库中。
jQuery 1.3
(2009年1月):这一版使用了全新的选择符引擎Sizzle,库的性能也因此有了极大提升。这一版正式支持事件委托特性。
jQuery 1.3.2
(2009年2月):这次小版本升级进一步提升了库的性能,例如改进了:visible/:hidden选择符、.height()/.width()方法的底层处理机制。另外,也支持查询的元素按文档顺序返回。
jQuery 1.4
(2010年1月14号):对代码库进行了内部重写组织,开始建立一些风格规范。老的core.js文件被分为attribute.js,css.js,data.js,manipulation.js,traversing.js和queue.js;CSS和attribute的逻辑分离。
重要变化:
1. Ajax重写
Ajax模块完全进行了重写。新增一个jXHR对象,为不同浏览器内置的XMLHttpRequest提供了一致的超集。对于XMLHttpRequest之外的传输机制,比如JSONP请求,jXHR对象也可以进行处理。(详情可以参见:jQuery.ajax文档)
此外,系统的可扩展性大大增强,可以附加各种数据处理器、过滤器和传输机制,为开发新的Ajax插件提供了方便。
2. 延迟对象
延迟对象(Deferred Object,jQuery.Deferred对象)是一个可链接的(chainable)实用工具对象,实现了Promise接口,可以在回调队列中注册多个回调、调用回调队列并转发任何同步/异步函数的成败状态。正如Using Deferreds in jQuery 1.5一文中说明的,其结果是在jQuery中能够将依赖于某个任务(事件)结果的逻辑与任务本身解耦了。这一点在JavaScript中其实并不新鲜,Mochikit和Dojo等已经实现有些日子了。由于jQuery 1.5的Ajax模块内置使用了延迟对象,因此通过jQuery编写Ajax程序将自动获得这一功能。
开发人员借此可以使用无法立即获得的返回值(如异步Ajax请求的返回结果),而且第一次能够附加多个事件处理器。
例如,使用了新的jQuery内部Ajax API就可以实现下面的代码了:
// Assign handlers immediately after making the request,// and remember the jxhr object for this request var jxhr = $.ajax({ url: "example.php" }) .success(function() { alert("success"); }) .error(function() { alert("error"); }) .complete(function() { alert("complete"); });// perform other work here ... // Set another completion function for the request above jxhr.complete(function(){ alert("second complete"); });
此外,使用jQuery.Deferred还可以开发自己的延迟对象。更多详情参见:延迟对象文档。
3. jQuery.sub()
jQuery 1.5提供了一种创建和修改jQuery副本的方式。可以用来添加不向外部公开的方法,或者对jQuery的某些方法进行重新定义以提供新功能,或者提供更好的封装、避免名称空间冲突。当然,也可以用来开发插件,但Resig强烈建议在开发插件之前,先考虑jQuery UI widget工厂。
值得注意的是,sub函数并不提供真正的隔离,所有方法、数据、调用仍然依靠jQuery本身来支持。
4. 遍历性能提高
在新版本中.children(),.prev(),.next()几个常用的遍历函数性能有了显著提高。
5. 内部开发系统
John Resig还特别提到了jQuery团队内部开发系统的两点改变:一是服务器端用Node.js替换了老的Java/Rhino系统,使得团队可以专注于JavaScript环境的新变化;二是所用的代码优化程序从Google Closure切换到UglifyJS,新工具的压缩效果非常令人满意。
使用方法
jQuery可以下载使用,有两个版本的 jQuery 可供下载
Production version - 用于实际的网站中,已被精简和压缩。
Development version - 用于测试和开发(未压缩,是可读的代码)
jQuery 1.8.0版时压缩前后的对比
插件机制
jQuery的官方插件是jQuery UI。开发者可以任意扩展jQuery的函数库或者按照自己的需求开发UI组件。网上已经有数以万计的jQuery插件,覆盖各种各样的需求。例如Ajax辅助、数据表格、动态列表、XML工具、拖曳、cookie处理、弹出层等等。jQuery 的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择,例如ComponentOne Studio for ASP NET Wijmo.
随着jQuery插件在网站建设过程中的使用率不断的增加,所以有必要跟进时代步伐开发出一些新的插件/代码片段,以此来巩固并提高前端用户体验,将用户体验提升到一个新的高度。其中包括Flat jQuery Price Slider、Gmaps jQuery Map Plugin 、FormChimp——MailChimp Ajax plugin for jQuery 等。
控件
jQuery Gantt控件是一个基于原生HTML5/jQuery,功能丰富的控件,该控件真正实现了跨平台,在许多设备和浏览器中无缝的运行。
使用项目甘特图中内置的调度,依赖等功能实现任务分层列表的可视化。
使用资源甘特图实现一个资源利用视图。
使用基于API的jQuery或者基于API的MVC可帮您轻松地安装甘特图并加快应用速度。
可与诸如KnockOut(KO),jQuery.tmpl等流行的jQuery模式一同使用。
如何创建一个自定义jquery插件
jQuery 库是专为加快 JavaScript 开发速度而设计的。通过简化编写 JavaScript 的方式,减少代码量。使用
jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代码。如果这样的话,这可能就是您需要编写自定义 jQuery 插件的一个原因。
jQuery 插件允许您使用自定义代码扩展 jQuery 库;您可以对一些重复性函数使用插件。例如,很多插件可供幻灯片、下拉菜单和折叠菜单所用。如果您搜索 jQuery 插件,就会发现有大量可用于自己项目的示例(看看它们是如何构建的)。
准备工作
对JavaScript、jQuery 和CSS有一个基本了解。(用到的源代码及示例在本文最下方)
开始
jQuery 是一个可扩展 JavaScript 语言的库。当您创建一个 jQuery 插件时,本质上是在扩展这个 jQuery
库。要真正了解插件如何扩展 jQuery 库需要对 JavaScript prototype 属性有一个基本了解。尽管不直接使用,但是
JavaScript prototype 属性可通过 jQuery 属性 fn 在后台使用,这是原生 JavaScript prototype
属性的一个 jQuery 别名。
要使用 fn 属性创建一个新 jQuery 插件,只需要为 fn 属性分配一个插件名,并将其指向一个充当构造函数的新函数,类似于纯
JavaScript。Code 1显示了如何定义一个名为 accordion 的新 jQuery 插件,其方法是通过使用 jQuery 对象和
fn 属性,并将其分配给一个新的构造函数。
Code 1:定义一个名为 accordion 的新 jQuery 插件
jQuery.fn.accordion = function() {
// 在这里添加插件代码
};
Code 1 展示了创建 jQuery 插件的一种方法;该示例没有什么功能性错误。但是,创建一个 jQuery
插件所推荐的方法是,先创建一个允许使用美元符号 ($) 的包装器函数。在默认情况下,美元符号可能与其他 JavaScript
框架发生冲突,如果将插件包装在一个函数中,就不会出现冲突。Code 2 中的示例代码显示如何将一个包装器函数应用到一个 jQuery
插件定义中。
(function($) {
$.fn.accordion = function() {
// 在这里添加插件代码
};
})(jQuery);
在Code 2 中,jQuery 关键字被应用到包装器函数中,这允许您在插件中使用美元符号,就像使用 fn
属性时那样。包装器函数就绪后,就可以在整个插件的任何地方使用美元符号代替 jQuery
关键字,不会干扰其他第三方插件。该选项提供了一种方法使我们可以在开发整个插件中编写较少的代码,并且有助于您的插件代码保持整洁,易于维护。
维护链接性
jQuery 的一个优势是允许您使用任何类型的选择器。但是,必须记住,您的插件可以处理几种不同的元素类型。使用 this
关键字允许您的插件应用于相关函数,通过循环实现每个元素的访问,而不考虑元素类型。如果在 each 循环前使用 return
关键字,就可以使用您的插件维护链接性。清单 3 显示了分配给一个函数处理程序且与 return 关键字相结合的 each 循环。
code 3. 在 each 循环之前使用 return 关键字
(function($) {
$.fn.accordion = function() {
return this.each(function() {
// 使用 return
});
};
})(jQuery);
有了Code 3 的代码后,示例 accordion 插件可用在一个方法调用链中。有了链接性(另一个强大的 jQuery
特性),您的插件就可用在一个方法调用链中。例如,下面的代码显示了如何淡出 HTML 元素,并在单一的方法调用链中将其从文档对象模型 (DOM)
中删除。
$("#my-div").fadeOut().remove();
构造一个 accordion
一个典型的层叠设计包括标题栏和相关内容区域。定义列表是一个可供 accordions 使用的很好的 HTML 结构;dt 元素供标题所用,而dd 元素供内容区域所用。清单 4 中的 HTML 结构是一个定义列表,含有四个标题以及相应的内容区域。
Code 4. 单一方法调用链
dl class="accordion" id="my-accordion"
dt第1部分/dt
dd内容一/dd
dt第2部分/dt
dd内容二/dd
dt第3部分/dt
dd内容三/dd
dt第4部分/dt
dd内容四/dd
/dl
Code 4 中定义的列表也有一个分配给它的名为 accordion 的 CSS 类。没有应用任何 CSS,这个 accordion 结构看起来类似于图 1 中的基础设计
为了美观,我们再给Code 4中的Html美化一下,并命名为“jquery.accordion.css”
Code 5. CSS部分
.accordion {
width: 500px;
border: 1px solid #ccc;
border-bottom: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
.accordion dt,
.accordion dd {
border-bottom: 1px solid #ccc;
margin: 0px;
}
.accordion dt {
background: #eaeaea;
cursor: pointer;
padding: 8px 4px;
font-size: 13px;
font-weight: bold;
}
.accordion dd {
padding: 12px 8px;
}
效果如下图:
自定义插件
要制作一个功能性 accordion,必须将自定义代码应用到您上一小节创建 jQuery 插件的函数。accordion
插件从遍历所有已定义的 accordion 开始。要定义一个 accordion,在 HTML 文档或外部嵌入式 JavaScript
文件中使用下列 jQuery。
$('dl#my-accordion').accordion();
对于每个 Accordion,您可以使用 jQuery 的 children 方法访问相关定义的标题,返回一个数组或 dt 元素。应用一个
click 事件到 dt 元素,然后一个名为 reset 方法应用到每个 dt。accordion 首次加载时,该 reset 方法会折叠所有
dd 元素。单击 dt 元素或者标题栏时,click 事件会触发一个名为 onClick 的自定义方法。自定义 onClick 方法用于查找
accordion 中的所有 dt 元素。它调用一个自定义 hide 方法,该方法通过使用 next 方法找到紧挨着 dt 元素的 dd
元素,隐藏每个相关的 dd 元素,通过使用 next 方法找到紧挨着 dt 元素的 dd 元素,然后向上滑动激活它。
所有 dd 元素被隐藏后,使用 slideDown 方法,就可以看见与单击过的 dt 元素相关的 dd 元素,并创建一个放大和收缩动画,如清单 8
所示。onClick 方法的最后一行代码是 return false,确保任何被点击的主题栏没有显现出其一般行为。例如,如果您使用一个
anchor 元素作为标题栏,您可能想要执行 return false,这样就不会将用户定向到另一个页面或现有页面的一部分。
Code 6. 自定义用于创建一个 jQuery 插件的 accordion 函数
(function($) {
$.fn.accordion = function(options) {
return this.each(function() {
var dts = $(this).children('dt');
dts.click(onClick);
dts.each(reset);
});
function onClick() {
$(this).siblings('dt').each(hide);
$(this).next().slideDown('fast');
return false;
}
function hide() {
$(this).next().slideUp('fast');
}
function reset() {
$(this).next().hide();
}
}
})(jQuery);
如果该 accordion 插件与一个 HTML 定义列表结构相关联时,比如您之前创建的那个 accordion 函数将被应用。有了
accordion 函数,单击一个标题栏或 dt 元素时,会打开其内容区域,而其他内容区域则关闭。换句话说,一次只能打开一个内容区域。
设定插件的默认值(Defaults)和设置项(options)
jQuery 插件可以包括 defaults 和 options。Options 本质上就是传递给插件的参数。可以使用 options
发送一个参数作为 object literal,这是一个标准 jQuery 实践,而不需要传递多个参数。如果您的插件支持 options,使用
defaults 对象设置默认的 options 将是一个最佳方式。和 options 一样,defaults 是一个 object
literal,应该包括您想要传递到插件中的属性。
例如,如果您支持一个可用于在首次加载时打开 accordion 第一个内容区域的属性,那么在您的插件中应该包括一个 open
属性的默认值。在您的插件中使用 defaults 确定默认函数,使用 options 覆盖默认值。如果插件接收 options,可以使用
$.extend 方法执行覆盖。jQuery 的 $.extend 方法合并两个或多个对象。Code 7 中的示例显示在一个自定义 jQuery
插件中使用 $.extend 方法合并用户定义选项和默认选项的一般实现。
Code 7. 向一个自定义的 accordion jQuery 插件添加 options 和 defaults
(function($) {
$.fn.accordion = function(options) {
var settings = $.extend({}, {open: false}, options);
return this.each(function() {
var dts = $(this).children('dt');
dts.click(onClick);
dts.each(reset);
if(settings.open) $(this).children('dt:first-child').next().show();
});
function onClick() {
$(this).siblings('dt').each(hide);
$(this).next().slideDown('fast');
return false;
}
function hide() {
$(this).next().slideUp('fast');
}
function reset() {
$(this).next().hide();
}
}
})(jQuery);
$.extend 方法参数是一个目标对象和 2 个或多个合并对象。在本示例中,目标对象是一个空 object
literal,充当合并对象容器。目标将成为一个包含合并对象值的单一对象(在该案例中是 settings 变量)。第 2
个参数是一个包含默认插件属性的 object literal。第 3 个参数是用户定义的 options 参数。要在一个 HTML 元素上使用
accordion 插件传递 options,需要知道除了之前您作为 object literal 传递的属性外还有哪些属性,如下所示。
$('dl#my-accordion').accordion({open:true});
在Code 7 示例中,传递到插件的 options 通过 $.extend 方法覆盖 defaults。如果没有传递 options,则使用默认值。对于示例插件,可使用 open 属性确定加载时是否打开第一个内容区域。
可重用性
您可以在任何 HTML 文档中重用示例 accordion 插件,可以在单个 HTML 文档中多次使用。您也可以包括多个
accordion 结构,就像已创建的那个 accordion,使用刚创建的新 accordion 插件通过 jQuery 将每个单独定义为
accordion。要向一个 HTML 文档添加多个 accordion,只需要添加尽可能多的 accordion 结构。Code 8
中的代码包括两个 accordion 结构,由一个段落隔开。
Code 8. 在同一个 HTML 文档中使用多个 accordion
dl class="accordion" id="my-accordion"
dt第1部分/dt
dd内容一/dd
dt第2部分/dt
dd内容二/dd
dt第3部分/dt
dd内容三/dd
dt第4部分/dt
dd内容四/dd
/dl
dl class="accordion" id="my-accordion"
dt第5部分/dt
dd内容五d
dt第6部分/dt
dd内容六dd
dt第7部分/dt
dd内容七/dd
/dl
Code 8 中的两个 accordion 结构几乎一样,除了内容不一样外,更重要的是 ID 值也不一样。第一个结构包含一个
my-accordion ID 值。第 2 个结构包含一个 my-accordion2 ID 值。现在可以单独定向这些结构。例如,下列
jQuery 脚本使用已创建的新插件将每个 accordion 结构定义为一个 accordion。
$('dl#my-accordion').accordion({open:true});
$('dl#my-accordion2').accordion({open:true});
两个 accordion 结构定义完成后,第一个面板默认设置为打开下图 显示一个用在同一个 HTML 文档的多个 accordion 插件的示例。
如何编写jquery插件
编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,提高开发效率和方便后期维护。本文将详细介绍如何编写jQuery插件
类型
jQuery的插件主要分为3种类型
1、封装对象方法
这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件。此类插件可以发挥出jQuery选择器的强大优势,有相当一部分的jQuery的方法,都是在jQuery脚本库内部通过这种形式“插”在内核上的,例如:parent()方法、appendTo()方法等。这些方法在现在来看都是jQuery本身自带的方法了。平时,我们是可以直接拿来就用的,只需引入jQuery库就行
2、封装全局函数
可以将独立的函数加到jQuery命名空间下,如常用的jQuery.ajax()、去首尾空格的jQuery.trim()方法等,都是jQuery内部作为全局函数的插件附加到内核上去的
3、选择器插件
虽然jQuery的选择器十分强大,但是在少数情况下,还是会需要用到选择器插件来扩充一些自己喜欢的选择器
要点
1、jQuery插件的文件名推荐命名为jQuery.[插件名].js,以免和其他JS库插件混淆
2、所有的对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上
3、在插件内部的this指向的是当前通过选择器获取的jQuery对象,而不像一般方法那样,如click,内部的this指向的是DOM元素
4、可以通过this.each来遍历所有的元素
5、所有的方法或函数插件,都应当以分号结尾。否则压缩的时候可能出现问题。为了稳妥些,甚至可以在插件头部先加上一个分号,以免他人不规范的代码影响自身的插件代码
6、插件应该返回一个jQuery对象,以保证插件的可链式操作
7、避免在插件内部使用$作为jQuery对象的别名,而应使用完整的jQuery来表示,避免冲突。当然,也可以利用闭包来回避这种问题,使插件内部继续使用$作为jQuery的别名
闭包
利用闭包的特性,即可以避免内部临时变量影响全局空间,又可以在插件内容继续使用$作为jQuery的别名。常见的jQuery插件都是以下这种形式的:
(function(){
/*这里放置代码*/
})();
首先定义一个匿名函数function(){/*这里放置代码*/},然后用括号括起来,变成(function(){/*这里放置代码*/})这种形式,最后通过()这个运算符来执行。可以传递参数进行,以供内部函数使用
//为了更好的兼容性,开始前有个分号
;(function($){ //此处将$作为匿名函数的形参
/*这里放置代码,可以使用$作为jQuery的缩写别名*/
})(jQuery); //这里就将jQuery作为实参传递给匿名函数了
上面的代码是一种常见的jQuery插件的结构
插件机制
jQuery提供了两个用于拓展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法。jQuery.fn.extend()方法用于拓展封装对象方法的插件,jQuery.extend()方法用于拓展封装全局函数的插件和选择器插件。这两个方法都接受一个参数,类型为Object。Object对象的"名/值对"分别代表"函数或方法名/函数主体"
【jQuery.fn.extend()】
jQuery.fn.extend()方法用于将一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法
labelinput type="checkbox" name="foo" Foo/label
labelinput type="checkbox" name="bar" Bar/label
button id="btn1"全选/button
button id="btn2"全不选/button
script
jQuery.fn.extend({
check: function() {
return this.each(function() { this.checked = true; });
},
uncheck: function() {
return this.each(function() { this.checked = false; });
}
});
$('#btn1').click(function(){
$( "input[type='checkbox']" ).check();
});
$('#btn2').click(function(){
$( "input[type='checkbox']" ).uncheck();
});
/script
【jQuery.extend()】
jQuery.extend()方法用一个或多个其他对象来扩展一个对象,然后返回被扩展的对象
jQuery.extend( target [, object1 ] [, objectN ] )
例如,合并settings对象和options对象,修改并返回settings对象
var settings = {validate:false,limit:5,name:"foo"};
var options = {validate:true,name:"bar"};
var newOptions = jQuery.extend(settings,options);
console.log(newOptions);//Object {validate: true, limit: 5, name: "bar"}
jQuery.extend()方法经常被用于设置插件方法的一系列默认参数
function foo(options){
options=jQuery.extend({
name:"bar",
length:5,
dataType:"xml"
},options);
如果用户调用foo()方法的时候,在传递的参数options对象设置了相应的值,那么就使用设置的值,否则使用默认值
通过使用jQuery.extend()方法,可以很方便地用传入的参数来覆盖默认值。此时,对方法的调用依旧保持一致,只不过要传入的是一个映射而不是一个参数列表。这种机制比传统的每个参数都去检测的方式不仅灵活而且更加简洁。此外使用命名参数意味着再添加新选项也不会影响过去编写的代码,从而使开发者使用起来更加直观明了
jquery插件开发有几种
//类级别插件开发,主要是在jQuery中定义全局方法:
//第一种写法
jQuery.myFunc = function(str){
alert("直接在jquery中定义方法",str)
}
//调用方式 $.myFunc("hello!");
//第二种写法
jQuery.extend({
myFunc:function(str){
alert("extend扩展$的方法",str)
}
})
//调用方式 $.myFunc("hello!");
//第三种写法: 为了不污染全局,挂载一个对象作为命名空间,自定义的所有方法放在这里,保证jQuery全局安全。
jQuery.define={
myFunc:function(str){
alert("命名空间的写法",str)
}
}
//调用方式:$.define.myFunc("hello");
//以上三种是级别插件开发方式,不常用,从调用方式看出,他们是全局执行的,不需要绑定节点对象。
//对象级别插件开发:有规范模板
;(function($){
$.fn.plugin = function(options){
var defaults = {
//各种默认参数
}
var options = $.extend(defaults,options); //传入的参数覆盖默认参数
this.each(function(){
var _this = $(this); //缓存一下插件传进来的节点对象。
//执行内容
})
return $(this); //把节点对象返回去,为了支持链式调用。
}
})(jQuery);
//调用方式
$("selector").plugin({
//自定义参数,json格式
})
什么是jquery插件?有什么用?
jquery 插件就是一些人用jquery写的一些工具,常见的是jquery UI和jquery easyui,我们在调用时只需要用很少的代码就能实现很好的效果。
如easyui的datagrid、combobox、tree等可以实现表格、下拉框、树等形状及需要的操作。
附:easyui官网
可以在网站里面下载demo、观看一些特效、下载插件js等。
jQuery插件开发全解析 jQuery插件的开发包括两种:
一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法。jQuery 的全局函数就是属于jQuery命名空间的函数。
另一种是对象级别的插件开发,即给jQuery对象添加方法。
文章标题:jquery插件开发,jquery拥有成熟插件
网页URL:http://myzitong.com/article/dsedecd.html