- 浏览: 108817 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
masuweng:
JAVA对数字证书的常用操作 -
beming:
org.springframework.beans.facto ...
利用Ant与Proguard混淆引用的子工程项目jar包及打war包 -
beming:
不错,挺清晰的
利用Ant与Proguard混淆引用的子工程项目jar包及打war包 -
sotired:
mark,看看
ExtJs2.0学习系列 - 索引贴
近期要准备一个web前端技术交流会的内容,所以陆续会有一些整理的资料发布,JQuery目前在组内日常开发中占据了重要地位,但各自为战的情况 很明显,要做到重用和通用,形成插件是不错的办法,特别是基于JQuery的插件,具有使用简单,可参数化配置等优点。这篇文章就介绍了如何开发 JQuery的插件。原文地址是:http://www.learningjquery.com/2007/10/a-plugin-development-pattern
我已经开发基于JQuery的插件有一段时间了,对于各种形式和要求的插件开发有了较好的掌握。在这里,我将在本文中分享我认为十分有用的插件开发 方式。当前前提是假定你对JQuery的插件开发有一定了解,如果你是插件开发的新手,不妨先看看jQuery官网上的the jQuery Authoring Guidelines。
我认为以下插件开发模式是必须应该掌握的:
1.在JQuery命名空间内声明一个特定的命名;2.接收参数来控制插件的行为;
3.提供公有方法访问插件的配置项值;
4.提供公有方法来访问插件中其他的方法(如果可能的话);
5.保证私有方法是私有的;
6.支持元数据插件;
下面,我将逐一讲述上面的内容,并在同时给出相关的简单插件开发代码。
1.在JQuery命名空间内声明一个特定的命名这意味着开发的是一个单一命名的插件脚本,如果你的脚本包含多个插件或者有补充性质的插件,比如$.fn.doSomething() 和$.fn.undoSomething(),那你得声明多个命名了。但是总体来说,当开发一个插件时,我们应该努力做到用一个单一的命名来搞定整个插 件。
在例子中,我们将声明一个名为“hilight”的插件。
- $. fn . hilight = function () {
- // Our plugin implementation code goes here.
- } ;
我们可以这样调用:
$(’#myDiv’).hilight();
但是假如我们需要打破这种单一的命名和调用方式呢?有很多理由支持我们这么做:设计上的需要;更加简单和可读的配置;而且那样将更加符合OO的要求。
在没有给命名空间来到麻烦的前提下,将插件的部署打破成为多个函数的形式将是十分繁琐的。我们通过认识并利用JavaScript中 functions是最高层的对象,和其他对象一样,functions可以被赋予属性,前面我们已经将hilight命名声明在了JQuery的原型对 象上,那么,其实,其他的我们想扩展的属性或对象都能够在hilight上进行声明。稍后将详细讲述此点。
2.接收参数来控制插件的行为;来为我们的hilight插件添加指定前景和背景色的功能,我们需要在函数中允许一个object类型的选项设置。如下所展示的那样:
- $. fn . hilight = function ( options ) {
- var defaults = {
- foreground : ' red ' ,
- background : ' yellow '
- } ;
- // Extend our default options with those provided.
- var opts = $. extend ( defaults , options ) ;
- // Our plugin implementation code goes here.
- } ;
现在,我们的插件可以这样来调用:
$(’#myDiv’).hilight({
foreground: ‘blue’
});
上面的代码我们可以做一下改进,使得插件的默认值可以在插件之外被设置。这无疑是十分重要的,因为它使得插件用户可以使用最少的代码来修改插件配置,这其实是我们利用函数对象的开始。
- // plugin definition
- $. fn . hilight = function ( options ) {
- // Extend our default options with those provided.
- // Note that the first arg to extend is an empty object -
- // this is to keep from overriding our "defaults" object.
- var opts = $. extend ({} , $. fn . hilight . defaults , options ) ;
- // Our plugin implementation code goes here.
- } ;
- // plugin defaults - added as a property on our plugin function
- $. fn . hilight . defaults = {
- foreground : ' red ' ,
- background : ' yellow '
- } ;
这里要讲的方法和前面的讲解一脉相承,用此方法来扩展你的插件(而且能够让其他人进行扩展)是件很有意思的事情。例如,在扩展hilight插件 时,我们可以定义一个format方法用来格式化高亮显示的文本,原来的hilight插件和扩展了format方法的插件代码如下:
- $. fn . hilight = function ( options ) {
- // iterate and reformat each matched element
- return this . each ( function () {
- var $ this = $ ( this ) ;
- ...
- var markup = $ this . html () ;
- // call our format function
- markup = $. fn . hilight . format ( markup ) ;
- $ this . html ( markup ) ;
- }) ;
- } ;
- // define our format function
- $. fn . hilight . format = function ( txt ) { '
- return ' < strong > ' + txt + ' < / strong>';
- };
如前面所述,我们已经很容易的通过设置options对象的属性来允许一个回调函数来覆写默认的格式设置。在这里有另外一个非常棒的方法来个性化你
的插件,上面展示的方法实际上就是通过暴露format方法,使其可以被重新定义。这种做法使得其他人可以采用他们自己的习惯和方式来重写你的插件,这意
味着他们可以为你的插件写额外的扩展插件。
仔细考量一下前面我们用到的插件例子程序,你可能会想“我们究竟应该在什么时候使用这种插件方式来实现需求”的问题。一个来自现实应用中的插件便是“
Cycle
Plugin”,它是一个支持多种滑动显示特效的插件,特效包括滚动、滑动和渐变等等。但是,实际上,并没有办法来定义每一个可能会用在滑动变幻上的特
效。这就是这种扩展方式的有用之处。“ Cycle
Plugin”插件暴露了”transitions”对象,这使得用户只需要按照如下方式便可以添加自己的变幻定义:
$.fn.cycle.transitions = {
…
};
这种技巧使得用户可以定义或者采用自己习惯的方式来扩展“ Cycle Plugin”。
上面提到的暴露插件中的公有方法的技巧使得插件能够被覆写,这将使插件变得十分灵活而强大,但至于哪一部分,那些属性和方法应该被暴露出来,你得小
心了。一旦使其能够被外界访问到,你就得注意到任何调用参数和语义化的变动都可能使其丧失向前的兼容性。作为一般准则,如果不确定是否应该暴露某个属性或
对象的话,那就最好别那样做。
那么我们应该怎样来定义多个方法而不至于使命名空间混乱并且保证不被暴露再外呢?这就是闭包的工作,为了便于演示,我们给插件加入了一个叫做
“debug”的功能,它用来记录firebug控制台所选择的网页元素数目。为了创建一个闭包,我们将整个功能的定义放入在一个function中了
(有关这方面的知识,可参见JQuery手册)。
- // create closure
- ( function ( $ ) {
- // plugin definition
- $. fn . hilight = function ( options ) {
- debug ( this ) ;
- ...
- } ;
- // private function for debugging
- function debug ( $ obj ) {
- if ( window . console & amp ;& amp ; window . console . log )
- window . console . log ( ' hilight selection count: ' + $ obj . size ()) ;
- } ;
- ...
- // end of closure
- })( jQuery ) ;
debug方法在这里是无法被在插件以外访问到的,因此,我们称之为它是插件私有的。
6.支持元数据插件;根据你所写的插件的类型,为你的插件加入元数据插件的支持将使其变得更强大。就我个人来说,喜欢采用元数据插件的重要原因便是它可以让你使用定义之外的标签来覆写你的插件属性设置(这在创建demo和例子时十分有用),而且支持它十分的简单。
更新:这部分内容可以在本文的评论中展开讨论(既然有争议的话)
- // plugin definition
- $. fn . hilight = function ( options ) {
- ...
- // build main options before element iteration
- var opts = $. extend ({} , $. fn . hilight . defaults , options ) ;
- return this . each ( function () {
- var $ this = $ ( this ) ;
- // build element specific options
- var o = $. meta ? $. extend ({} , opts , $ this . data ()) : opts ;
- ...
改动部分的代码会做如下的事情:
*测试metadata插件是否可用
*如果可以,将用metadata扩展options对象
这被加入到jQuery.extend,作为其最后一个参数,所以它可以覆写任何其他参数设置。现在我们可以通过下面的方式控制其行为:
- <!-- markup -->
- < div class = " hilight { background: 'red', foreground: 'white' } " > Have a nice day! </ div >
- < div class = " hilight { foreground: 'orange' } " > Have a nice day! </ div >
- < div class = " hilight { background: 'green' } " > Have a nice day! </ div >
而在调用方面,我们通过一行简单的代码就可以实现预期的效果:
$(’.hilight’).hilight();
将上面所述内容涉及到的代码放在一起,完整的例子程序代码如下:
- //
- // create closure
- //
- ( function ( $ ) {
- //
- // plugin definition
- //
- $. fn . hilight = function ( options ) {
- debug ( this ) ;
- // build main options before element iteration
- var opts = $. extend ({} , $. fn . hilight . defaults , options ) ;
- // iterate and reformat each matched element
- return this . each ( function () {
- $ this = $ ( this ) ;
- // build element specific options
- var o = $. meta ? $. extend ({} , opts , $ this . data ()) : opts ;
- // update element styles
- $ this . css ({
- backgroundColor : o . background ,
- color : o . foreground
- }) ;
- var markup = $ this . html () ;
- // call our format function
- markup = $. fn . hilight . format ( markup ) ;
- $ this . html ( markup ) ;
- }) ;
- } ;
- //
- // private function for debugging
- //
- function debug ( $ obj ) {
- if ( window . console & amp ;& amp ; window . console . log )
- window . console . log ( ' hilight selection count: ' + $ obj . size ()) ;
- } ;
- //
- // define and expose our format function
- //
- $. fn . hilight . format = function ( txt ) {
- return ' <strong> ' + txt + ' </strong> ' ;
- } ;
- //
- // plugin defaults
- //
- $. fn . hilight . defaults = {
- foreground : ' red ' ,
- background : ' yellow '
- } ;
- //
- // end of closure
- //
- })( jQuery ) ;
发表评论
-
jQuery使用手册
2009-11-05 16:55 63jQuery是继prototype之后的 ... -
javascript正则表达式使用详解
2009-11-05 17:01 748简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有 ... -
ExtJs2.0学习系列 - 索引贴
2009-11-05 20:50 984稍微整理下extjs系列的文章目录 ExtJs2.0学习系 ... -
jQuery expressions
2009-11-06 14:19 32jQuery expressions are a combin ... -
thickBox学习笔记 - 条件满足则显示thickBox
2009-11-06 17:23 987Jquery的ThickBox插件非常好用,可以显示一张图片、 ... -
javascript 类定义方法
2009-11-09 11:09 833Java代码 /* 工厂方式--- 创建并返回特 ... -
thickbox提交数据后关闭子窗口刷新父窗口
2009-11-10 10:29 13471.父页面添加引用 <script type=&q ... -
jquery.select.js
2009-12-09 17:50 1167Jquery其实本身 ... -
JQuery插件的两种写法
2009-12-10 16:30 803第一种 js: (function (jQuery){ ... -
常用正则表达式
2009-12-23 13:39 614正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常 ... -
A Plugin Development Pattern
2010-04-06 11:38 17I've been developing jQuery plu ... -
jQuery Plugin 开发
2010-04-06 13:43 171.Guideline:http://docs.jquery. ...
相关推荐
jquery 的经典 英文书 jQuery Plugin Development Beginner’s Guide.PDF
**jQuery摄像头插件jquery-webcam-plugin** 在网页开发中,集成摄像头功能可以帮助用户实时捕捉图像,广泛应用于在线证件照上传、视频聊天、虚拟试衣间等场景。`jQuery webcam plugin`是一个优秀的JavaScript库,它...
这篇“jQuery插件开发学习”的主题旨在帮助开发者深入理解如何利用jQuery来开发自定义插件,提高代码复用性和项目效率。下面我们将详细探讨jQuery插件开发的相关知识点。 首先,了解jQuery的核心概念是至关重要的。...
### jQuery插件开发全解析 #### 一、引言 jQuery作为一款优秀的JavaScript库,在前端开发领域具有举足轻重的地位。它简化了许多常见的JavaScript任务,使得开发者能够更轻松地处理DOM操作、事件处理以及Ajax交互等...
《jQuery插件开发详解》 在Web开发领域,jQuery是一个广泛应用的JavaScript库,它极大地简化了DOM操作、事件处理和动画制作。对于开发者而言,掌握jQuery插件的开发技巧是提升工作效率的重要一环。本篇将深入探讨...
使用jQuery开发Plugin插件指南
[Packt Publishing] jQuery 插件开发 初学者指南 (英文版) [Packt Publishing] jQuery Plugin Development Beginner's Guide (E-Book) ☆ 出版信息:☆ [作者信息] Giulio Bai [出版机构] Packt Publishing ...
这篇博文“JQuery插件开发 + 插件”可能涉及到如何创建自定义的jQuery插件以及如何利用这些插件来增强网页功能。下面我们将深入探讨jQuery插件开发的相关知识点。 一、jQuery插件基础 1. 插件定义:jQuery插件是...
### Jquery插件开发全解析 #### 一、类级别的插件开发 在Jquery插件开发中,类级别的插件开发是指向Jquery添加新的全局函数,这实质上是给Jquery类本身添加方法。这类插件开发的直接目标是在Jquery的命名空间中...
### jQuery插件开发全解析知识点 #### 1. jQuery插件开发概述 在jQuery插件开发中,开发者可以创建两种类型的插件:类级别的插件和对象级别的插件。类级别的插件允许开发者为jQuery对象添加新的全局函数,类似于在...
### jQuery UI与Plugin开发实战:折叠菜单(Accordion) 在探讨jQuery UI与插件开发实战时,折叠菜单(Accordion)作为一款强大的用户界面组件,凭借其节省空间、易于定制的特性,成为了网页设计中的常用工具。本文...
- **理解jQuery的选择器和DOM操作**:jQuery的核心在于其强大的选择器和对DOM的操作能力,这是开发插件的基础。 - **掌握jQuery插件的生命周期**:了解插件初始化、执行和销毁的过程,对于合理设计插件逻辑至关重要...
8. **其他实用插件**:jQuery社区还提供了大量实用插件,如`Nice Select`(美化下拉选择框),`ScrollTo`(页面滚动定位),`Countdown`(倒计时插件)等,覆盖了开发中的众多需求。 在压缩包的文件列表中,我们...
这个插件基于流行的JavaScript库jQuery,它简化了前端开发过程,使得即便是初学者也能轻松实现复杂的数据管理界面。 jQuery的核心特性包括选择器、事件处理、动画和Ajax交互,这些特性在Grid View插件中得到了充分...
《jQuery输入格式插件Masked Input Plugin深度解析》 在Web开发中,用户界面的交互性和数据输入的规范性是提升用户体验的关键因素。jQuery Masked Input Plugin是一款强大的JavaScript库,它能够帮助开发者轻松地...
jQuery 插件使客户端表单验证变得容易,同时仍然提供了大量的自定义选项。如果您要从头开始构建新的东西,或者当您试图将某些东西集成到具有大量现有标记的现有应用程序中时,它都是一个不错的选择。该插件捆绑了一...
图书的源代部分; 还有由于容量的原因, 视频和web实例图片没有上传. 《jQuery全能权威指南:jQuery Core+jQuery Plugin+...、jQuery UI、jQuery Mobile以及大量第三方的插件库和2800多个应用jQuery技术的网页参考。
在网页开发中,JQuery插件广泛应用于增强用户体验、创建动态效果、简化DOM操作等方面。 这个JQuery插件源码可能包含了一个或多个自定义的JQuery函数,它们被设计用来实现"超眩的页面"和"绝对的动态"效果。这样的...
标题为《一步一步教你写一个jQuery的插件教程(Plugin)》,这篇教程旨在带领读者了解如何创建一个jQuery插件,具体例子是一个能够高亮显示文本的简单插件。在开始之前,有必要明确几个开发插件时需要注意的要点。首先...