自定义jquery插件,简单的jquery插件实例

如何去定义一个jquery插件

扩展jquery的时候。最核心的方法是以下两种:

站在用户的角度思考问题,与客户深入沟通,找到北海网站设计与北海网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、做网站、企业官网、英文网站、手机端网站、网站推广、域名与空间、网络空间、企业邮箱。业务覆盖北海地区。

$.extend(object) 可以理解为jquery添加一个静态方法

$.fn.extend(object) 可以理解为jquery实例添加一个方法

$.extend(object)

例子:

/* $.extend 定义与调用

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

$.extend({ fun1: function () { alert("执行方法一"); } });//定义

$.fun1();//调用

$.fn.extentd(object)

/* $.fn.extend 定义与调用

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

$.fn.extend({ fun2: function () { alert("执行方法2"); } });

$(this).fun2();

//等同于

$.fn.fun3 = function () { alert("执行方法三"); }

$(this).fun3();

定义jquery插件的基本结构

1. 定义作用域:

为插件定义一个私有作用域。外界代码不能直接访问插件内部。插件内部代码不受外界干扰,也不会污染到全局变量。

//step01 定义JQuery的作用域

(function ($) {

})(jQuery);

2. 为插件添加扩展方法:

复制代码

//step01 定义JQuery的作用域

(function ($) {

//step02 插件的扩展方法名称

$.fn.easySlider = function (options) {

}

})(jQuery);

复制代码

3. 设置默认值:

//step01 定义JQuery的作用域

(function ($) {

//step03-a 插件的默认值属性

var defaults = {

prevId: 'prevBtn',

prevText: 'Previous',

nextId: 'nextBtn',

nextText: 'Next'

//……

};

//step02 插件的扩展方法名称

$.fn.easySlider = function (options) {

//step03-b 合并用户自定义属性,默认属性

var options = $.extend(defaults, options);

}

})(jQuery);

其中:var options = $.extend(defaults, options)的含义了。表示 options 去覆盖了defaults的值,并把值赋给了options。

在插件环境中,就表示用户设置的值,覆盖了插件的默认值;如果用户没有设置默认值的属性,还是保留插件的默认值。

4. 支持jquery选择器:

//step01 定义JQuery的作用域

(function ($) {

//step03-a 插件的默认值属性

var defaults = {

prevId: 'prevBtn',

prevText: 'Previous',

nextId: 'nextBtn',

nextText: 'Next'

//……

};

//step02 插件的扩展方法名称

$.fn.easySlider = function (options) {

//step03-b 合并用户自定义属性,默认属性

var options = $.extend(defaults, options);

//step4 支持JQuery选择器

this.each(function () {

});

}

})(jQuery);

5 .支持JQuery的链接调用:

为了能达到链接调用的效果必须要把循环的每个元素return

//step01 定义JQuery的作用域

(function ($) {

//step03-a 插件的默认值属性

var defaults = {

prevId: 'prevBtn',

prevText: 'Previous',

nextId: 'nextBtn',

nextText: 'Next'

//……

};

//step02 插件的扩展方法名称

$.fn.easySlider = function (options) {

//step03-b 合并用户自定义属性,默认属性

var options = $.extend(defaults, options);

//step4 支持JQuery选择器

//step5 支持链式调用

return this.each(function () {

});

}

})(jQuery);

6. 插件里的方法:

在插件里定义的方法,外界不能直接调用,我在插件里定义的方法也没有污染外界环境。

复制代码

//step01 定义JQuery的作用域

(function ($) {

//step03-a 插件的默认值属性

var defaults = {

prevId: 'prevBtn',

prevText: 'Previous',

nextId: 'nextBtn',

nextText: 'Next'

//……

};

//step06-a 在插件里定义方法

var showLink = function (obj) {

$(obj).append(function () { return "(" + $(obj).attr("href") + ")" });

}

//step02 插件的扩展方法名称

$.fn.easySlider = function (options) {

//step03-b 合并用户自定义属性,默认属性

var options = $.extend(defaults, options);

//step4 支持JQuery选择器

//step5 支持链式调用

return this.each(function () {

//step06-b 在插件里定义方法

showLink(this);

});

}

})(jQuery);

如何自己开发一个简单的jquery 插件

现在网上关于js和jquery封装的插件很多,我刚刚接触前端的时候,就很敬佩那些自己写插件的大牛们!因为是他们给网站开发更多的便利,很多网页效果,网上很多现成的插件!那么这些插件是如何写的呢看首先是有扎实的js和jquery技术基础,其次还有一些写插件的方法和技巧。关于js和jquery的技术基础,那是一个慢慢积累的过程。但是关于写插件的一些注意和技巧,本文可以略微介绍一下,方便以后写插件的时候用得到。

jquery插件开发模式

jquery插件一般有三种开发方式:

通过$.extend()来扩展jQuery

通过$.fn 向jQuery添加新的方法

通过$.widget()应用jQuery UI的部件工厂方式创建

第一种$.extend()相对简单,一般很少能够独立开发复杂插件,第三种是一种高级的开发模式,本文也不做介绍。第二种则是一般插件开发用到的方式,本文着重讲讲第二种。

如何编写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插件

so sasy!

1.$.fn.插件名=function(){}

2.$.插件名=function(){}

不知道什么意思或者调用,再说吧!

如何编写JQuery 插件详解

jQuery 如何写插件 -

jQuery插件的开发包括两种:

一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法。jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级别的插件开发,即给jQuery对象添加方法。下面就两种函数的开发做详细的说明。

1、类级别的插件开发

类级别的插件开发最直接的理解就是给jQuery类添加类方法,可以理解为添加静态方法。典型的例子就是$.AJAX()这个函数,将函数定义于jQuery的命名空间中。关于类级别的插件开发可以采用如下几种形式进行扩展:

1.1

添加一个新的全局函数

添加一个全局函数,我们只需如下定义:

jQuery.foo =

function() {

alert('This is a test. This is only a

test.');

};

1.2

增加多个全局函数

添加多个全局函数,可采用如下定义:

Java代码 收藏代码

jQuery.foo = function() {

alert('This is a test. This is

only a test.');

};

jQuery.bar =

function(param) {

alert('This function takes a

parameter, which is "' + param + '".');

};

调用时和一个函数的一样的:jQuery.foo();jQuery.bar();或者$.foo();$.bar('bar');

1.3

使用jQuery.extend(object); 

jQuery.extend({

foo:

function() {

alert('This is a test. This is

only a test.');

},

bar: function(param)

{

alert('This function takes a

parameter, which is "' + param +'".');

}

});

1.4

使用命名空间

虽然在jQuery命名空间中,我们禁止使用了大量的javaScript函数名和变量名。但是仍然不可避免某些函数或变量名将于其他jQuery插件冲突,因此我们习惯将一些方法封装到另一个自定义的命名空间。

jQuery.myPlugin =

{

foo:function()

{

alert('This is a test. This is only a

test.');

},

bar:function(param)

{

alert('This function takes a parameter, which is "' + param +

'".');

}

};

采用命名空间的函数仍然是全局函数,调用时采用的方法:

$.myPlugin.foo();

$.myPlugin.bar('baz');

通过这个技巧(使用独立的插件名),我们可以避免命名空间内函数的冲突。

2、对象级别的插件开发

对象级别的插件开发需要如下的两种形式:、

形式1:

(function($){

$.fn.extend({

pluginName:function(opt,callback){

// Our plugin implementation code goes

here.

}

})

})(jQuery);

形式2:

(function($)

{

$.fn.pluginName = function()

{

// Our plugin implementation code goes here.

};

})(jQuery);

上面定义了一个jQuery函数,形参是$,函数定义完成之后,把jQuery这个实参传递进去.立即调用执行。这样的好处是,我们在写jQuery插件时,也可以使用$这个别名,而不会与prototype引起冲突.

2.1

在JQuery名称空间下申明一个名字

这是一个单一插件的脚本。如果你的脚本中包含多个插件,或者互逆的插件(例如:

$.fn.doSomething() 和

$.fn.undoSomething()),那么你需要声明多个函数名字。但是,通常当我们编写一个插件时,力求仅使用一个名字来包含它的所有内容。我们的示例插件命名为“highlight“

$.fn.hilight

= function() {

// Our plugin implementation

code goes

here.

};

我们的插件通过这样被调用:

$('#myDiv').hilight();

但是如果我们需要分解我们的实现代码为多个函数该怎么办?有很多原因:设计上的需要;这样做更容易或更易读的实现;而且这样更符合面向对象。这真是一个麻烦事,把功能实现分解成多个函数而不增加多余的命名空间。出于认识到和利用函数是javascript中最基本的类对象,我们可以这样做。就像其他对象一样,函数可以被指定为属性。因此我们已经声明“hilight”为jQuery的属性对象,任何其他的属性或者函数我们需要暴露出来的,都可以在"hilight"

函数中被声明属性。稍后继续。

2.2

接受options参数以控制插件的行为

让我们为我们的插件添加功能指定前景色和背景色的功能。我们也许会让选项像一个options对象传递给插件函数。例如:

// plugin definition

$.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'

});

2.3

暴露插件的默认设置

我们应该对上面代码的一种改进是暴露插件的默认设置。这对于让插件的使用者更容易用较少的代码覆盖和修改插件。接下来我们开始利用函数对象。

//

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'

};

现在使用者可以包含像这样的一行在他们的脚本里:

//这个只需要调用一次,且不一定要在ready块中调用

$.fn.hilight.defaults.foreground

=

'blue';

接下来我们可以像这样使用插件的方法,结果它设置蓝色的前景色:

$('#myDiv').hilight();

如你所见,我们允许使用者写一行代码在插件的默认前景色。而且使用者仍然在需要的时候可以有选择的覆盖这些新的默认值:

//

覆盖插件缺省的背景颜色

$.fn.hilight.defaults.foreground = 'blue';

// ...

//

使用一个新的缺省设置调用插件

$('.hilightDiv').hilight();

// ...

//

通过传递配置参数给插件方法来覆盖缺省设置

$('#green').hilight({

foreground:

'green'

});


文章标题:自定义jquery插件,简单的jquery插件实例
分享地址:http://pwwzsj.com/article/hoggid.html