时间:2021-05-18
基础
1、jQuery插件开发主要使用如下两个方法:
1.1、添加静态方法
为扩展jQuery本身,为类添加新的方法,可以理解文添加静态方法。
$.extend({ addMethod : function(a, b){return a + b;} // $.addMethod(1, 2); //return 3});1.2、添加成员方法
给jQuery对象添加方法,对jQuery.prototype进行扩展,为jQuery类添加成员方法:
$.fn.extend({ getInputText:function(){ $(this).click(function(){ alert($(this).val()); }); } });$("#username").getInputText();2、一个通用的框架:
以下是一个通用的框架:
关于
$.extend(defaults, options);就是通过合并defaults和options来扩展defaults,实现插件默认参数的功能。
实践
1、声明插件名称:
添加一个函数到jQuery.fn(jQuery.prototype)对象,该函数的名称就是你的插件名称:
在命名不与jQuery其他函数冲突的情况,可以使用闭包的方式使用$符号:
(function( $ ) { $.fn.myPlugin = function() { // Do your awesome plugin stuff here };})( jQuery );2、插件中的上下文:
jQuery接收一个回调,该回调本身就指向了dom,直接使用this就相当于我们平时的$(this)的情况:
下面是一个简单的jQuery插件,实现获取所有div的最大高度:
(function( $ ){ $.fn.maxHeight = function() { var max = 0; this.each(function() { max = Math.max( max, $(this).height() ); }); return max; };})( jQuery );var tallest = $('div').maxHeight(); // Returns the height of the tallest div3、维护链接性:
前面的示例返回一个整数值最高的div,但是通常的意图仅在某种程度上是仅修改插件的元素集合,并将它们传递到下一个链中的方法。这样的jQuery的设计优雅的地方。所以保持链接性放到一个插件,您必须确保您的插件返回这个关键字。
因为插件返回this关键字的范围,它维护链接性,jQuery可以继续利用jQuery方法,如. css。所以,如果你的插件不返回一个内在价值,你应该总是返回this。
4、参数的传递,Defaults和Options:
通过$.extend合并默认参数和调用者传入的参数。
5、命名空间:
正确的命名空间在插件开发中是一个非常重要的部分。正确的命名空间,可以确保你的插件将有一个很低的几率在同一个页面上被他插件或代码覆盖。
在任何情况下都不应该在一个插件的jQuery.fn对象中声称多个名称空间。
(function( $ ){ $.fn.tooltip = function( options ) { // THIS }; $.fn.tooltipShow = function( ) { // IS }; $.fn.tooltipHide = function( ) { // BAD }; $.fn.tooltipUpdate = function( content ) { // !!! };})( jQuery );你应该收集所有的方法到一个对象化字面,并且通过方法的字面值进行调用:
(function( $ ){ var methods = { init : function( options ) { // THIS }, show : function( ) { // IS }, hide : function( ) { // GOOD }, update : function( content ) { // !!! } }; $.fn.tooltip = function( method ) { // Method calling logic if ( methods[method] ) { return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' ); } };})( jQuery );// calls the init method$('div').tooltip(); // calls the init method$('div').tooltip({ foo : 'bar'});// calls the hide method$('div').tooltip('hide'); // calls the update method$('div').tooltip('update', 'This is the new tooltip content!');这种类型的方法封装和体系结构在jQuery插件社区中是一个标准,它适用于无数的插件,包括jQueryUI插件和小部件。
6、Events:
Bind方法允许通过命名空间的方式绑定事件,如果你的插件绑定了事件,可以通过命名空间的方式,在解除绑定事件时,你也可以这样做,来防止影响到其他的事件。可以通过“.<namespace>” 的方式来设置绑定事件的命名空间。
7、Data:
关于data方法可以参考官方的文档:http://docs.jquery.com/Data,既是在页面的元素中绑定存储数据。
这里通过编写插件,实现在页面中的每个元素都绑定一些当前的状态或者内容。
(function( $ ){ var methods = { init : function( options ) { return this.each(function(){ var $this = $(this), data = $this.data('tooltip'), tooltip = $('<div />', { text : $this.attr('title') }); // If the plugin hasn't been initialized yet if ( ! data ) { $(this).data('tooltip', { target : $this, tooltip : tooltip }); } }); }, destroy : function( ) { return this.each(function(){ var $this = $(this), data = $this.data('tooltip'); // Namespacing FTW $(window).unbind('.tooltip'); data.tooltip.remove(); $this.removeData('tooltip'); }) }, reposition : function( ) { // ... }, show : function( ) { // ... }, hide : function( ) { // ... }, update : function( content ) { // ...} }; $.fn.tooltip = function( method ) { if ( methods[method] ) { return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' ); } };})( jQuery );声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
开发jQuery插件时总结的一些经验分享一下。一、先看jQuery(function(){});全写为jQuery(document).ready(functi
最近在IE10中开发jquery,关于jquery中combobox多选不能兼容的问题,进行一些总结。当给combobox设置属性“multiple:true”
现在的jQuery插件很多,尽可以根据您的项目要求来选择,不过也有一些插件很好用,几乎各种项目都能够用得上。这里就为您介绍12款开发中最常用的jQuery插件。
jQuery如今已经成为Web开发中最流行的JavaScript库,通过jQuery和大量的插件,你可以轻松实现各种绚丽的效果。本文将为你介绍一些jquery实
写好jQuery插件,有一些注意的地方(持续添加)。支持UMD现在前端开发讲究模块化,所以jQuery插件也最好能够兼顾模块化。模块化模式大概有几种:AMD、C