`

jQuery插件分类与编写

阅读更多

1. 插件种类
插件其实就是对现有的方法(或者叫函数)做一个封装,方便重用提高开发效率。

jQeury主要有2种类型
1)实例对象方法插件
开发能让所有的jQuery实例对象都可以调用的方法。也就是说,只要通过$()工厂获得
的jQuery实例对象,都可以调用我们开发的方法。95%的插件都是这种类型 

2)全局函数插件
可以将独立的函数添加到jQuery命名空间中了。那么调用的时候就可以使用 $.函数名
称() 或者jQuery.函数名称()来调用了。可以理解为静态方法。 

2. 添加全局函数
我们可以将jQuery理解为类,$是这个类的别名。开发全局函数就是开发这个类的
静态方法。如:$.get() ,$.post()。添加新的全局函数,实际上就是扩展jQuery“类”本身,
给jQuery命名空间上添砖加瓦. 

加入新添加的全局函数的名称是sayHello,功能是弹出一个hello的对话框. 

2.1增加一个全局函数

jQuery.sayHello=function(name){
 alert("你好,"+name); 
} 
调用: 
$.sayHello('张三'); 
或者
jQuery.sayHello("李四"); 

 

2.2增加多个全局函数
使用jQuery提供的全局函数extend来一次加入多个函数

jQuery.extend({
 sayHello:function(name){
         alert("你好"+name);
 }, 
 sayBye:function(name){
         alert("再见"+name);
 }
 }
) 

 

上面的代码是往jQuery命名空间中添加了两个函数sayHello和syBye,调用同上 

2.3命名空间 

前面的方式有可能与jQuery命名空间中的其它函数产生命名冲突的危险,也有可能
与其它jQuery插件中定义的方法重名,所以我们可以考虑将我们定义的所有的函数封装
到一个对象中去,相当于为我们的函数给了一个命名空间 

代码如下:

jQuery.wq={
 sayHello:function(name){
         alert("你好"+name);
 },
 sayBye:function(name){
         alert("再见"+name);
 }
} 

 

这种写法可以这样来理解: 首先我们为jQuery添加了一个wq属性,而这个属性本
身是一个对象,后面我们使用JSON来定义了一个对象,这个对象有两个方法。

所以调用就是如下形式:
调用:

$.wq.sayHello("王五");
jQuery.wq.sayBye("赵六");

 

注意:即使页面中包含了jQuery文件,也不应该认为简写形式”$”是始终有效的。
因为”$” 只是一个别名而已,其它的库可以重新定义这个”$” .所以在定义插件的时候,
最好使用jQuery来调用方法,或者重新定义”$” 

3. 为jQuery实例对象创建新方法
对所有的jQuery实例对象中的方法进行扩展。
3.1一次定义一个方法

jQuery.fn.sayHello=function(){
 alert("你好!");
}
调用: 
$("div").sayHello();

 

3.2一次定义多个方法
前面一次定义一个方法太少,我们能不能一次多定义一些方法?jQuery库提供了
jQuery.fn.extend方法来一次定义多个方法

jQuery.fn.extend({
 sayHello:function(){
         alert("Hello");
 },
 sayBye:function(){
         alert("Bye Bye");
 }
});

 

可以看到extend方法的参数实际上就是一个JSON格式的对象。 
调用的时候可以如下调用: 
$(“div”).sayHello() 和 $(“div”).sayBye(); 

4. 插件方法内部的this关键字说明
上面的写法相当于每一个jQuery实例都可以使用,这跟全局函数没有什么区别。而我们定义的实例方法往往是需要在特定的环境中使用的。所以我们在编写插件方法的时候,应该考虑对象方法的环境。“this”关键字在任何插件方法内部引用的都是当前的jQuery实例对象。所以可以在this上调用任何jQuery方法。需要注意的是:我们使用的jQuery选择符可能会选取多个元素,哪么“当前的jQuery实例”有可能是一个元素,多个元素或者零个元素。我们必须考虑到这种情况。 

如果我们使用选择器选中了多个元素,那就可以使用each()方法来迭代每个元素,在each方法内部,再使用this,这个this指的就是每个HTML DOM 元素的引用。 

5. 方法连缀 
使用jQuery对象方法的时候,基本都能使用连缀的方式。那么我们使用插件的时候就必须为插件方法返回一个jQuery实例对象。

jQuery.fn.extend({
 sayHello:function(){
     alert("Hello");
     return this;
 },
 sayBye:function(){
     alert("Bye Bye");
     return this;
 }
}); 

 

6. 为插件方法定义默认值 

通过使用jQuery.extend()方法,可以方便提供随时可能被传入的参数覆盖的默认值,此时对方法的调用会大致保持相同. 

注意:jQuery.extend方法在API中的两个地方都有,一个在【核心】.【插件机制】中有,并且只有一个参数。一个在【工具】.【数组和对象操作】中。

注意这里我们使用的是后者,形式为: jQuery.extend(target, object1) 

它的作用是将后面对象中所有的属性和方法复制到前面对象中,即将object1中的属性和方法复制到target对象中。 

所以我们在定义一个插件的时候,可以使用如下方式为插件方法指定默认值:

jQuery.fn.sayHello=function(properties){
 var defaults={
     name:"张三",
     age:20
 };
 jQuery.extend(defaults,properties);
 alert("第一个参数:"+defaults.name+" 第二个参数"+defaults.age);
 return this;
}

 

这样一来,我们就可以这样来调用了

$("div").sayHello({
    name:"李四",
    age:30
});
或者:
$("div").sayHello({
    name:"王五"
});
或者:
$("div").sayHello({
    age:25
});

 

7. 插件开发技巧-闭包
我们在开发插件的过程中,是将代码写在了一个js文件中,那么这个js文件中有可能会定义很多的方法或者一些变量。那么这些方法或者变量就有可能与别的js文件中的变量或者方法冲突,那么如何将我们定义的js代码“暴露”一部分,隐藏一部分呢?也就是你虽然定义了,但是在其它地方访问不到,该暴露的暴露,不该暴露的就藏起来,要达到这个目的,就得用到“闭包“ 

那何为“闭包“?说简单点就是允许使用内部函数,即在函数中定义另外一个函数,而且内部函数可以访问在外部函数中声明的变量和其它内部函数。比如有如下定义:  

//定义A函数

function A(){
 //定义B函数
 var B=function(){
 alert("这是B");
 }
 return B; //将B函数返回
}
var c=A();//此时C就是B函数
c();//其实就是调用B函数

 

可以看到,内部函数B在包含它的A函数之外执行了,这就形成了闭包。也就是B在外部函数A返回之后被执行了,而当B执行的时候它仍然可以访问A中定义的局部变量和其它内部函数。 

利用闭包的特性,我们可以将我们需要暴露的方法暴露出来,比如B,又可以隐藏一些局部变量和函数,比如在A中定义变量和函数,A以外的其它函数是不能访问的,但是B是可以访问的。 

其实上面的代码就是先执行A函数,得到结果,这个结果又是一个函数,然后再执行B函数即
var c=A();
c(); 

既然我们的目的是想让B在A之外执行,那我们可以将代码做如下变通:

var C; 
function A(){
 var B=function(){
     alert("这是B函数");
 }
 C=B;//将内部函数赋值给C
}

 

//现在执行C,实际上就是B的执行C(); //弹出对话框 "这是B函数" 


能不能从外面传个参数进去交给函数B呢?改写代码如下:

(function($){
 //这里就可以使用$符号了.....
 //将B函数添加到JQuery的实例对象函数中
 $.fn.B=function(){
     alert("这是B函数");
 }
})(jQuery); 

 

这段代码被浏览器加载就会被执行,jQuery作为参数传递进去交给了 $符号,所以内部就能使用$符号了,在代码中,我们使用$.fn为jQuery的实例对象添加了一个方法B,页面
上使用:

<script>
$(document).ready(function(){
    $("h1").B();
});
</script> 

 

执行结果
所以常见的jQuery插件都是以下这种形式:
好处就在于代码内部定义的方法外部只有插件能够访问,这样就将一些代码隐藏起来了,该
暴露的插件方法暴露在外部了。

(function($){
 //插件代码
})(jQuery) 

 

 

 

 

0
5
分享到:
评论

相关推荐

    jquery插件编写指南

    ### jQuery 插件编写指南详解 #### 一、引言 在前端开发中,jQuery 是一个非常流行的 JavaScript 库,它极大地简化了 HTML 文档遍历、事件处理、动画等操作,同时也支持丰富的插件机制。本文将详细介绍如何编写 ...

    Jquery快速学(五,常用的插件应用与编写)

    2. **插件编写技巧**:编写jQuery插件时,需要注意几个核心元素,如设置默认选项、接收参数、处理DOM元素、封装代码等。通常,插件会接受用户自定义的配置项,并在内部进行处理。此外,良好的插件设计应考虑到代码的...

    jQuery插件开发学习

    这篇“jQuery插件开发学习”的主题旨在帮助开发者深入理解如何利用jQuery来开发自定义插件,提高代码复用性和项目效率。下面我们将详细探讨jQuery插件开发的相关知识点。 首先,了解jQuery的核心概念是至关重要的。...

    利用jQuery插件构建无限级分类Tree

    在编写jQuery插件时,我们需要考虑以下几个关键点: 1. **数据处理**:接收并解析JSON数据,构建树结构。 2. **HTML结构**:生成具有正确父子关系的HTML元素。 3. **事件绑定**:为展开/折叠按钮绑定事件监听器,...

    jQuery插件,jQuery插件

    通过编写或使用jQuery插件,开发者可以轻松地实现特定功能,而无需从零开始编写大量的JavaScript代码。 创建一个jQuery插件通常涉及到以下几个步骤: 1. **封装函数**:首先,你需要将你的功能封装成一个函数,这...

    jQuery插件编写步骤详解

    jQuery插件编写是jQuery框架中一个重要的组成部分,它允许开发者扩展jQuery的核心功能,创建自定义的、可复用的组件。jQuery插件的编写通常遵循一套标准的步骤,这些步骤包括: 1. **封装匿名函数**: jQuery插件...

    jquery插件库-jquery抽奖插件.zip

    以"jquery插件库-jquery抽奖插件"为例,这个插件可能包含一个旋转盘的HTML结构,结合CSS3的transform属性实现3D旋转效果。JavaScript部分则通过jQuery选择器获取元素,设置动画时间和旋转角度,然后绑定click事件,...

    jquery插件.rar

    《jQuery插件开发详解》 在Web开发领域,jQuery是一个广泛应用的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画制作等任务。jQuery插件是jQuery生态系统的重要组成部分,它们扩展了jQuery的核心...

    sublime2 jquery插件

    在Sublime Text 2中安装jQuery插件,可以极大地提升前端开发者的工作效率,使得jQuery代码的编写更加得心应手。 jQuery是一种强大的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务,极大地...

    如何编写jquery插件

    本文将详细介绍如何编写jQuery插件 类型 jQuery的插件主要分为3种类型 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件。此类插件可以发挥出jQuery...

    jquery插件库-jquery仿京东商品详情页图片放大效果.zip

    "jquery插件库-jquery仿京东商品详情页图片放大效果.zip"这个压缩包文件包含了一个jQuery插件,旨在模仿京东商品详情页中的图片放大效果,为用户提供更直观的商品查看体验。 首先,我们来详细了解一下jQuery插件的...

    eclipse上支持jquery插件

    标题“eclipse上支持jquery插件”所指的就是这种能够为Eclipse添加jQuery智能提示和代码辅助功能的扩展。这样的插件使得开发者在编写jQuery代码时,可以享受到如同使用Java或其他语言一样的代码补全、错误检查和调试...

    jquery插件大全(内含Demo)

    **jQuery插件大全:打造网页交互新体验** jQuery是一个广泛使用的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画设计以及Ajax交互。这个"jQuery插件大全(内含Demo)"压缩包文件提供了丰富的...

    jquery插件

    总之,jQuery插件极大地丰富了jQuery的功能,使得开发者能够快速构建功能齐全、用户体验良好的Web应用,而无需从零开始编写大量代码。通过选择合适的插件,可以节省开发时间,提高工作效率,并确保项目具备高质量和...

    Jquery插件学习

    通过这个学习实例,你应该能够逐步理解并实践以上知识点,最终达到熟练编写和使用jQuery插件的目标。记住,实践是检验学习成果的最好方式,动手尝试并不断调试你的代码,你会发现自己的技能在不断提升。

    50个jquery插件介绍

    "50个jQuery插件介绍"这篇文档很可能包含了对各种功能强大、用途广泛的jQuery插件的详细解读,帮助开发者提升网站的用户体验和功能实现。 首先,jQuery插件是jQuery库的扩展,由社区开发者创建,用于解决特定问题或...

    精美jQuery插件及源码

    此外,jQuery插件与HTML5和CSS3的结合,可以实现更丰富、更先进的Web效果。HTML5引入了许多新的标签和API,如canvas、video、audio等,而CSS3则提供了更强大的样式控制,如过渡、动画、阴影和边框。通过结合使用,...

    50个精彩JQuery插件案例

    1. **jQuery插件的原理**:jQuery插件是基于jQuery核心功能扩展的功能模块,通过$.fn.extend()方法,将新方法添加到jQuery对象的prototype上,使得所有jQuery选择器都能调用这些新方法。 2. **DOM操作**:jQuery...

    jquery插件开发文档

    在编写jQuery插件时,首先要了解其基本结构。开发者通常往`jquery.fn`对象中添加一个特定的函数对象,从而创建一个新的插件。例如,创建一个名为`myPlugin`的插件,可以这样定义: ```javascript jQuery.fn....

Global site tag (gtag.js) - Google Analytics