深入学习jQuery自定义插件

原文地址:jQuery自定义插件学习

1、定义插件的方法

对象级别的插件扩展,即为jQuery类的实例增加方法,

调用:$(选择器).函数名(参数);      $(‘#id’).myPlugin(options);

定义的方式:

$.fn.extend({
 "函数名":function(自定义参数){
 //这里写插件代码
 }
});

//或者是

$.fn.函数名 = function(options){

//这里写插件代码

}

  

类级别的方法,就是扩展jQuery类本身的方法,为它增加新的方法,

调用:$.函数名(arguments);      $.add(3,4);

$.extend({

"函数名":function(自定义参数){

//这里写插件代码

}

});

//或者是

$.函数名=function(自定义参数){

//这里写插件代码

}

  

你会发现他们的区别仅仅是少了一个fn而已,而jQuery.fn = jQuery.prototype,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。

如果A.prototype = new B();就相当于A.prototype是B的实例,A可以使用B中的所有方法。

那么在我们这里,不就正是扩展了对象的方法么,使对象能够使用我们所定义的方法。

关于prototype,可以参考这篇文章:JS中的prototype

那么extend又是什么意思呢?在我们这里extend就只有一个参数,

"函数名:function(自定义参数){

//这里写插件代码

}

  

此时,我们的这个函数就被合并到jquery的全局对象中去,就相当于扩展了jQuery类的方法。

因为,extend是有多个参数的,extend的所用就是合并参数到一个新的参数中,例如

var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"});

//结果就是

result={name:"Jerry",age:21,sex:"Boy"}

  

关于extend可以参考这篇文章:jQuery.extend 函数详解

以上还参考:jquery的extend和fn.extend

2、实例分析,定义一个带参数的插件。

一般我们都会在很多地方看到,不要js污染全局环境,其实也对,要不然你定义一个变量,在你引用别人的插件中也定义了,那就冲突了,这就涉及到了js作用域的问题,我们得“封装”作用域,于是我们知道一个函数的作用域仅仅在一个函数中,但函数执行完毕,变量也就会被注销。

于是这里我们得用到立即执行函数,用一个函数将我们定义的插件代码包裹起来,这样就形成了一个局部的作用域,从而不会影响到全局的环境,关于立即执行函数,可以参考这篇:js中(function(){…})()立即执行函数写法理解

那么,我们的写法将是:

(function($){

$.fn.extend({

函数 : function(options){

}

});

})(jQuery);

  

我想自定义一个弹出层插件,可以设置背景颜色,宽和高,不设置即为默认的。

首先,在html元素中,我想设置按钮点击,

<a id="dialog">点击弹出层</a>
<div class="dialog"></div>

  

其实这里的div.dialog是可以动态创建的,在这里就没有。动态创建可参考:jQuery – 添加元素

$(‘body‘).append($(‘<div></div>‘).addClass(‘dialog‘));//后面有疑问

  

css样式当然最初是隐藏的

.dialog{
width:300px;
height: 200px;
background:green;
position: absolute;
left:50%;top:30%;
margin-left: -150px;
display: none;
}

  

最后就是定义插件的js

(function($){
$.fn.extend({
dialog : function(options){
//$(‘body‘).append($(‘<div></div>‘).addClass(‘dialog‘));

//此处有疑问,我如果在这里动态创建元素后,为什么要点击2次才能看到效果?不理解,求告知。
var setting = $.extend({}, {background:‘green‘, width:300, height:200}, options);
return this.css({‘width‘:setting.width, ‘height‘:setting.height, ‘background‘:setting.background}).show(‘slow‘);
}
});
})(jQuery);

  

这里的return this的作用是使我们定义的插件方法可以链式调用,也就是维护链接性。

插件内部的this指向的是jQuery对象,而非普通的DOM对象。因为DOM对象是没有css()方法的,这是jQuery对象的方法,那么,jQuery对象的写法不应该是$(this)吗?在这里我们把this换成$(this)一样可以用,关于$(this)和this的区别,可以参考:jQuery中this与$(this)的区别,但我还是不清楚这里用this和$(this)为什么是一样的?

最后调用初始化就可以了。

$(‘#dialog‘).click(function(){
$(‘.dialog‘).dialog({
background:‘red‘,
width:500,
height:100
});
});

  

效果可以查看代码演示,上面的疑问希望给出解释。

以上还参考:创建一个自定义 jQuery 插件

jQuery自定义插件

 

时间: 2024-10-13 00:07:57

深入学习jQuery自定义插件的相关文章

jquery自定义插件——window的实现

本例子实现弹窗的效果: 1.jquery.show.js /* * 开发者:lzugis * 开发时间:2014年6月10日 * 实现功能:点击在鼠标位置显示div * 版本序号:1.0 */ (function($){ $.fn.showDIV = function(options){ var defaults = {}; var options = $.extend(defaults, options); var showdiv=$(this); var close, title, cont

代码:jquery自定义插件 demo

jquery自定义插件 demo 2016-1-13 只是一个简易的示例 <script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $.fn.portamento = function

jQuery自定义插件--banner图滚动

前言 jQuery是一个功能强大的库,提供了开发JavaScript项目所需的所有核心函数.很多时候我们使用jQuery的原因就是因为其使用插件的功能,然而,有时候我们还是需要使用自定义代码来扩展这些核心函数来提高开发效率.我们知道, jQuery库是为了加快JavaScript的开发速度而设计的,通过简化编写JavaScript的方式,减少代码量.所以,今天就带大家了解一下jQuery自定义插件以及自定义插件案例---banner图滚动. 一.自定义插件 自定义插件一般有两种类型:全局插件和局

你的专属定制——JQuery自定义插件

    前  言 絮叨絮叨 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多的事情.它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互. 那么这次,我就和大家来分享一下JQuery中的一个强大的功能--自

黑马day18 JQuery自定义插件

说明:使用JQuery中的JQuery.extend({//这里是json格式的数据});可以定义一个全局函数 使用JQuery中的JQuery.fn.extend({//这里是json格式的数据});可以定义一个局部函数 1.定义全局函数(来判断两个输入的数字的最大值和最小值) test.html <!DOCTYPE html> <html> <head> <title>test.html</title> <meta http-equiv

jquery自定义插件-参数化配置多级菜单导航栏插件

1 自定义菜单导航栏插件的必要性 看图说话,下面是利用自定义的菜单导航栏插件simpleMenu创建的网站导航示例: 插件默认提供的是如上图的导航栏样式,即一二级菜单为横向分布:三四级菜单为纵向分布. 使用插件时,可以修改默认参数,目前插件提供了设置菜单的分布方式:横向或纵向:菜单的位置:依赖上一级菜单栏的定位:上下左右定位. 修改调用参数,将一二级菜单改为纵向排列:并将三级菜单的显示位置改为二级菜单栏的右侧(其他的和默认保持一致),修改后运行效果如下图: 细心的观察,会发现上面两个菜单导航栏的

Jquery自定义插件

$.fn.extend是一个实例的扩展,但是$.extend是类的扩展 <script type="text/javascript"> (function($){ $.fn.extend({ myPlugName:function(){ $(this).click(function(){ alert($(this).val()); }); } }); })(jQuery); </script> <body> <input type="

jquery自定义插件实现分页效果

这节介绍如何自定义jquery插件,实现分页效果,话不多说,先看看实现的效果: 分页插件 实现的代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta charset="utf-8"> <title>page t

jquery自定义插件来实现分页的效果

本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta charset="utf-8"> <title>p