`
itxdl
  • 浏览: 25680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

jQuery插件开发模式

阅读更多
jQuery插件开发模式
软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践。

根据兄弟连教育(www.lampbrother.net)jQuery高级编程的描述,jQuery插件开发方式主要有三种:

通过$.extend()来扩展jQuery
通过$.fn 向jQuery添加新的方法
通过$.widget()应用jQuery UI的部件工厂方式创建
通常我们使用第二种方法来进行简单插件开发,说简单是相对于第三种方式。第三种方式是用来开发更高级jQuery部件的,该模式开发出来的部件带有很多jQuery内建的特性,比如插件的状态信息自动保存,各种关于插件的常用方法等,非常贴心,这里不细说。

而第一种方式又太简单,仅仅是在jQuery命名空间或者理解成jQuery身上添加了一个静态方法而以。所以我们调用通过$.extend()添加的函数时直接通过$符号调用($.myfunction())而不需要选中DOM元素($('#example').myfunction())。请看下面的例子。

$.extend({    sayHello: function(name) {        console.log('Hello,' + (name ? name : 'Dude') + '!');    }})$.sayHello(); //调用$.sayHello('Wayou'); //带参调用

上面代码中,通过$.extend()向jQuery添加了一个sayHello函数,然后通过$直接调用。到此你可以认为我们已经完成了一个简单的jQuery插件了。

但如你所见,这种方式用来定义一些辅助方法是比较方便的。比如一个自定义的console,输出特定格式的信息,定义一次后可以通过jQuery在程序中任何需要的地方调用它。

$.extend({    log: function(message) {        var now = new Date(),            y = now.getFullYear(),            m = now.getMonth() + 1, //!JavaScript中月分是从0开始的            d = now.getDate(),            h = now.getHours(),            min = now.getMinutes(),            s = now.getSeconds(),            time = y + '/' + m + '/' + d + ' ' + h + ':' + min + ':' + s;        console.log(time + ' My App: ' + message);    }})$.log('initializing...'); //调用

但这种方式无法利用jQuery强大的选择器带来的便利,要处理DOM元素以及将插件更好地运用于所选择的元素身上,还是需要使用第二种开发方式。你所见到或使用的插件也大多是通过此种方式开发。

插件开发

下面我们就来看第二种方式的jQuery插件开发。

基本方法

先看一下它的基本格式:
$.fn.pluginName = function() {    //your code goes here}
基本上就是往$.fn上面添加一个方法,名字是我们的插件名称。然后我们的插件代码在这个方法里面展开。

比如我们将页面上所有链接颜色转成红色,则可以这样写这个插件:
$.fn.myPlugin = function() {    //在这里面,this指的是用jQuery选中的元素    //example :$('a'),则this=$('a')    this.css('color', 'red');}
在插件名字定义的这个函数内部,this指代的是我们在调用该插件时,用jQuery选择器选中的元素,一般是一个jQuery类型的集合。比如$('a')返回的是页面上所有a标签的集合,且这个集合已经是jQuery包装类型了,也就是说,在对其进行操作的时候可以直接调用jQuery的其他方法而不需要再用美元符号来包装一下。

所以在上面插件代码中,我们在this身上调用jQuery的css()方法,也就相当于在调用 $('a').css()。

理解this在这个地方的含义很重要。这样你才知道为什么可以直接商用jQuery方法同时在其他地方this指代不同时我们又需要用jQuery重新包装才能调用,下面会讲到。初学容易被this的值整晕,但理解了就不难。

现在就可以去页面试试我们的代码了,在页面上放几个链接,调用插件后链接字体变成红色。

<ul> <li> <a href="http://www.webo.com/liuwayong">我的微博</a> </li> <li> <a href="http://http://www.cnblogs.com/Wayou/">我的博客</a> </li> <li> <a href="http://wayouliu.duapp.com/">我的小站</a> </li></ul><p>这是p标签不是a标签,我不会受影响</p><script src="jquery-1.11.0.min.js"></script><script src="jquery.myplugin.js"></script><script type="text/javascript"> $(function(){ $('a').myPlugin(); })</script>

下面进一步,在插件代码里处理每个具体的元素,而不是对一个集合进行处理,这样我们就可以针对每个元素进行相应操作。

我们已经知道this指代jQuery选择器返回的集合,那么通过调用jQuery的.each()方法就可以处理合集中的每个元素了,但此刻要注意的是,在each方法内部,this指带的是普通的DOM元素了,如果需要调用jQuery的方法那就需要用$来重新包装一下。

比如现在我们要在每个链接显示链接的真实地址,首先通过each遍历所有a标签,然后获取href属性的值再加到链接文本后面。

更改后我们的插件代码为:

$.fn.myPlugin = function() {    //在这里面,this指的是用jQuery选中的元素    this.css('color', 'red');    this.each(function() {        //对每个元素进行操作        $(this).append(' ' + $(this).attr('href'));    }))}
调用代码还是一样的,我们通过选中页面所有的a标签来调用这个插件

到此,你已经可以编写功能简单的jQuery插件了。是不是也没那么难。
分享到:
评论

相关推荐

    jquery插件开发模式实例详解

    本文实例讲述了jquery插件开发模式。分享给大家供大家参考,具体如下: jquery插件一般有三种开发方式: 通过$.extend()来扩展jQuery 通过$.fn 向jQuery添加新的方法 通过$.widget()应用jQuery UI的部件工厂方式...

    老司机带你解读jQuery插件开发流程

    jquery插件开发模式 jquery插件一般有三种开发方式: 通过$.extend()来扩展jQuery 通过$.fn 向jQuery添加新的方法 通过$.widget()应用jQuery UI的部件工厂方式创建 第一种$.extend()相对简单,一般很少能够独立...

    jquery-patterns, 用于启动插件开发的各种jQuery插件模式.zip

    jquery-patterns, 用于启动插件开发的各种jQuery插件模式 插件插件插件模式 因此,你已经尝试了模板,或者编写了一些你自己的插件。 他们工作的程度和可以读性,但是你对学习的感兴趣,如果有更好的方式可以以结构。...

    jQuery插件开发精品教程让你的jQuery提升一个台阶

    要说jQuery 最成功的地方,我认为是...jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践。 根据《jQ

    常用的jquery模板插件——jQuery Boilerplate介绍

    当我们在不断的实践中,慢慢积累下来时,有些问题得到了有效的避免,但也带来了新的问题:在众多纷杂的jquery插件开发模式中,究竟哪一种模式才是最好的呢? 如果能提供一个模板,通过一定的约束和规范为开发者解决...

    jQuery插件开发精品教程(让你的jQuery更上一个台阶)

    刘哇勇的部落格要说jQuery 最成功的地方...jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践。 根据

    jquery插件集成请调成手机模式查看

    闲来无事,学习了一下jquery插件,并开发了一些简单的jquery插件

    jquery插件集合,采用mvc模式开发了很多插件

    在easyui框架基础上增加了很多实用插件,比如多图上传,文字跑马灯,焦点幻灯图,ajax分页,表单自动验证,以及一些字符过滤处理插件等等,内容丰富

    一款带预览模式的Bootstrap所见即所得文本编辑器jQuery插件

    bootstrap-markdown-editor是一款带预览模式的Bootstrap所见即所得文本编辑器jQuery插件。该文本编辑器支持图片上传,可以进入全屏模式,非常实用。

    jQueryPluginStartKit:应用了AMD开发模式的JQuery插件开发启动套件– v0.1.0

    StartKit─项目应用了开发模式的JQuery插件开发启动套件。支持的功能列表分配功能解释HTML 合并档案语法检查压缩(优化) CSS合并档案压缩(优化)自动供应商前缀应用媒体查询包处理Java脚本AMD模式开发[ ] 模块管理...

    仿QQ空间相册图片浏览jQuery插件

    今天我们要来分享一款基于jQuery的相册图片浏览插件,它是一款仿QQ空间的相册浏览组件,点击缩略图即可弹出图片浏览窗口,这款jQuery相册图片浏览插件的特点是:1、支持左右键来切换图片;2、支持ESC键退出相册浏览...

    jquery.blockui遮罩插件

    jQuery BlockUI 插件可以在不同锁定浏览器的同时,模拟同步模式下发起Ajax请求的行为。该插件激活时,会组织用户在页面进行的操作,直到插件被关闭。

    ImageViewer是一款仿谷歌图片的图片缩放和平移特效jQuery插件

    ImageViewer是一款仿谷歌图片的图片缩放和平移特效jQuery插件。ImageViewer有3种图片查看模式:全屏模式、容器模式和图片模式。3种模式下都可以对图片进行缩放和平移来预览图片。

    jR3DCarousel是一款效果非常炫酷的3D旋转木马jQuery插件

    jR3DCarousel是一款效果非常炫酷的3D旋转木马jQuery插件。该旋转木马插件可以通过参数设置来修改旋转木马的类型,可以设置显示模式和easing动画缓动模式等。

    lazeemenu多层次的侧边栏菜单JQuery插件

    lazeemenu是一款可以将任何嵌套的无序列表转换为垂直多级列表菜单的jQuery插件。该垂直菜单采用github的手风琴菜单样式,它的展开节点支持普通文本和超链接两种模式。

    犀利开发_jQuery内核详解与实践(完整版421页).part3(共3部分)

    本书循序渐进地讲解了jquery高效开发的方法和技巧,内容包括jquery框架的设计模式和思路、sizzle选择器的构成和工作机制、dom文档操作、事件处理、动画设计、ajax异步通信、插件扩展和辅助工具等。  执行效率是...

    Jquery日历插件

    基于Jquery插件模式开发的日历插件,方便实用,自定义强

    JavaScript的jQuery库插件的简要开发指南

    前段时间简单学习了 jQuery 插件开发,开发了两个简单的插件,在此对两种插件的开发模式做简要总结。 基于选择器的插件 通常开发模式如下: (function($, window, undefined) { $.fn.PluginName = function(opts) ...

    超酷的日程安排Jquery插件

    这是一款功能超强大的插件,它可以自由管理自己的日程安排,有3种模式,分别为日,周,月,这样的话管理起来就非常清晰,如果想要保存数据,那就要配合后台程序了,方便网友们二次开发

Global site tag (gtag.js) - Google Analytics