jquery 插件闭包

1. 对JQuery自身的扩展插件
javascript

顾名思义,这种插件是对JQuery自身的方法库进行扩展的。在使用的时候经过$.MethodName()的方式直接使用。
插件代码示例:css

$.extend({   
handleTableUI : function (table){   
varthisTable = $( "#" + table);   
          
$(thisTable).find( "tr" ).bind( "mouseover" , function () {   
$( this ).css({ color: "#ff0011" , background: "blue" });   
});   
$(thisTable).find( "tr" ).bind( "mouseout" , function () {   
$( this ).css({ color: "#000000" , background: "white" });   
});   
}   
});

示例说明:当要对JQuery自身进行扩展的时候,须要采用$.extend();的形式进行开发,JQuery的extend()方法为咱们提供了扩展JQuery自身的方式,在extend()方法中,咱们采用{...}的形式编写具体的方法体。其中,最重要的是要定义咱们本身的扩展方法,如示例中的handleTableUI。定义的方式是:方法名 : function(参数){ 方法体 }。经过此种方式咱们就能够定义JQuery本身的扩展方法,并且这个方法能够在web页面经过智能提示显示出来。页面中调用的代码以下:
java

<scripttype= "text/javascript" >   
$(document).ready( function () {   
$.handleTableUI( "newTable" );   
});   
</script>

对HTML标记或页面元素进行扩展
使用这种插件的扩展方式,在使用此插件时,须要首先引用通过JQuery包装的页面元素,如:$("#tableId").Method()。
插件代码示例:jquery

( function ($){  
$.fn.tableUI = function (options){  
var defaults = {  
evenRowClass: "evenRow" ,  
oddRowClass: "oddRow" ,  
activeRowClass: "activeRow"
}  
var options = $.extend(defaults, options);  
this .each( function (){  
var thisTable=$( this );  
//添加奇偶行颜色 
$(thisTable).find( "tr:even" ).addClass(options.evenRowClass);  
$(thisTable).find( "tr:odd" ).addClass(options.oddRowClass);  
//添加活动行颜色 
$(thisTable).find( "tr" ).bind( "mouseover" , function (){  
$( this ).addClass(options.activeRowClass);  
});  
$(thisTable).find( "tr" ).bind( "mouseout" , function (){  
$( this ).removeClass(options.activeRowClass);  
});  
});  
};  
})(jQuery);

这里重点说一下这一句web

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

这里其实就是合并多个对象为一个。这里就是,若是你在调用的时候写了新的参数,就用你新的参数,若是没有写,就用默认的参数。闭包

 

当要对页面元素进行JQuery扩展时,须要采用(function($){...})(JQuery);的方式进行开发。在“...”处,定义咱们本身的方法,定义方式是:$.fn.自定义方法名 = function(参数){...};的形式定义扩展方法的具体内容。在页面调用的时候不一样于对JQuery自身的扩展。具体调用代码以下:函数

3. 不要用在页面显式调用JQuery的方法,而是经过直接添加JQuery插件脚本引用,便可实现对该插件的调用。布局

通常,若是须要用到一些全局的JQuery插件,即:插件的方法不须要显式调用,而是引用脚本便可;同时,这种插件通常对整个Web页面起到全局配置或设置的做用,如:对<body></body>内部的内容进行总体布局,此时能够采用脚本引用的方式实现。this

插件代码示例:

( function ($) {   
$.tableUI = { set: function () {   
varthisTable = $( "table" );   
$(thisTable).find( "tr" ).bind( "mouseover" , function () {   
$( this ).css({ color: "#ff0011" , background: "blue" });   
});   
$(thisTable).find( "tr" ).bind( "mouseout" , function () {   
$( this ).css({ color: "#000000" , background: "white" });   
});   
}   
};   
//此处须要进行自调用   
$( function () {   
$.tableUI.set();   
});   
})(jQuery);

示例说明:若是上面这段代码在my.plugin.js文件中,那么,咱们只须要在页面上添加对此脚本文件的引用便可,引用方式为:<scriptsrc="Scripts/my.plugin.js"type="text/javascript"></script>,固然,在全部要用到JQuery的地方,须要首先添加对JQuery库脚本的引用。在引用型插件的代码中,最主要的就是在插件中要主动调用本身所写的插件方法,上面代码中有注释的地方。不然,咱们写的插件代码将不会起做用。

 

2、插件的基本要点

 

在编写插件的时候,咱们须要记住这些要点,虽然不照着这么作不会影响使用,可是要是你的插件是不规范的代码,那何须花苦心思去写插件。

 

 jQuery插件的文件名推荐命名为jquery.[插件名].js,以避免和其余JavaScript库插件混淆。例如命名为jquery.color.js。

 全部的对象方法都应当附加到jQuery.fn对象上,而全部的全局函数都应当附加到jQuery对象自己上。

 在插件内部,this指向的是当前经过选择器获取的jQuery对象,而不像通常的方法那样,例如click()方法,内部的this指向的是DOM元素。

 能够经过this.each来遍历全部元素。

 全部的方法或函数插件,都应当以分号结尾,不然压缩的时候可能出现问题。为了更稳妥些,甚至能够在插件头部先加上一个分号,以避免他人的不规范代码给插件带来影响。具体方法能够参考后面的代码。

 插件应该返回一个jQuery对象,以保证插件的可链式操做。除非插件须要返回的是一些须要获取的量,例如字符串或者数组等。

避免在插件内部使用$做为jQuery对象的别名,而应使用完整的jQuery来表示。这样能够避免冲突。固然,也能够利用闭包这种技巧来回避这个问题,使插件内部继续使用$做为jQuery的别名。不少插件都是这么作的,本教程也会利用这种形式。

 

 

 

OK,以上就是我对JQuery插件的几点理解,但愿对你们能有所帮助,也但愿你们在使用的过程当中能及时反馈相关信息。

相关文章
相关标签/搜索