jQuery 插件基础
jQuery 插件基础
如果你需要在 jQuery 选择器上执行一系列重复操作, 这时候你需要编写 jQuery 插件.
jQuery 对象方法
在开始编写插件前, 首先需要了解 jQuery 原理. 请看下面的代码:
$( "a" ).css( "color", "red" );
这是一段非常简单的 jQuery 代码, 但是你知道这背后发生了什么? 当你使用 $
函数选择元素时, 它返回 jQuery 对象. 你可以在这个对象上调用各种方法 (比如 .css(), .click()
等). 这些 jQuery 方法通过 $.fn
原型继承. 我们可以通过在 $.fn
上添加属性, 就可以调用自己的方法.
一个简单的插件
本小节我们通过创建一个使所有元素变绿的插件来了解如何创建 jQuery 插件. 通过在 $.fn
上添加 greenify
方法来实现:
$.fn.greenify = function() {
this.css('color', 'green');
};
$('a').greenify();
可以在 greenify
看到我们通过 this
来调用 .css
, 而不是 $(this)
, 这是因为我们的 greenify
函数已经是和 .css()
一样, 都是 jQuery 对象的方法.
链式调用
我们可以在插件函数中返回 this
来实现链式调用:
$.fn.greenify = function() {
this.css('color', 'green');
return this;
};
$('a').greenify().addClass('greenified');
$
变量和作用域
通常我们使用 jQuery 的别名 $
变量来使用 jQuery, 如果你使用 jQuery 以外的库中也使用了 $
变量, 你需要调用 jQuery.noConflict()
使 jQuery 不使用 $
. 但是在我们的插件代码中不能生效, 因为我们直接使用 $
变量作为 jQuery 的别名. 为了更通用化, 并且依旧使用 $
别名, 将我们的代码包裹在立即函数调用中, 并且传递 jQuery:
(function($){
$.fn.greenify = function() {
this.css('color', 'green');
return this;
};
})(jQuery);
减少插件数目
在实现 jQuery 插件时, 应该减少挂载在 $.fn
上的插件. 这能减少插件相互覆盖的情况. 下面是一个不推荐的用法:
(function($){
$.fn.openPopup = function() {
// Open popup code.
};
$.fn.closePopup = function() {
// Close popup code.
};
})(jQuery);
推荐的做法是: 使用一个插件, 通过参数来执行不同操作:
(function( $ ) {
$.fn.popup = function( action ) {
if ( action === "open") {
// Open popup code.
}
if ( action === "close" ) {
// Close popup code.
}
};
}( jQuery ));
each
方法
通常使用 jQuery 选择器都返回 DOM
元素的集合, 如果插件是在特定元素上执行, 比如获取数据, 元素位置等操作, 就需要使用 each
方法, 这能保证我们的代码对每个元素都起作用:
$.fn.rectify = function() {
return this.each(function() {
var width = $(this).css('width');
this.css('height', width)
});
};
上述的代码使 DOM
对象高和宽相同, 如果不使用 each
, 那么就只对第一个对象起作用.
因为 each
本身就是链式调用, 所以我们直接返回 each
的结果.
插件添加选项参数
当插件越来越复杂的时候, 可以为插件添加选项参数:
(function ( $ ) {
$.fn.colorfy = function( options ) {
// This is the easiest way to have default options.
var settings = $.extend({
// These are the defaults.
color: "#556b2f",
backgroundColor: "white"
}, options );
// Greenify the collection based on the settings variable.
return this.css({
color: settings.color,
backgroundColor: settings.backgroundColor
});
};
}( jQuery ));
$( "div" ).colorfy({
color: "orange"
});
例子
一些 jQuery 插件的例子
https://445141126.github.io/jquery-demo/
jQuery 插件基础的更多相关文章
- js最详细的基础,jquery 插件最全的教材
一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...
- 【jQuery基础学习】08 编写自定义jQuery插件
目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...
- 前端基础进阶(十一):详细图解jQuery对象,以及如何扩展jQuery插件
早几年学习前端,大家都非常热衷于研究jQuery源码.我还记得当初从jQuery源码中学到一星半点应用技巧的时候常会有一种发自内心的惊叹,“原来JavaScript居然可以这样用!” 虽然随着前端的发 ...
- 关于jQuery插件imgAreaSelect基础讲解
关于ImgAreaSelect, 是一jQuery插件,它支持用户通过鼠标拖曳选择图片的一部分,如图片拖曳.图片编辑等~~来具体看一下 1.先下载imgAreaSelect插件 下载地址: 英文:h ...
- 自己写jquery插件之模版插件高级篇(一)
需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...
- JS原生ajax与Jquery插件ajax深入学习
序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...
- jquery插件的两种形式
这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...
- JQuery插件之Jquery.datatables.js用法及api
1.DataTables的默认配置 $(document).ready(function() { $('#example').dataTable(); } ); 示例:http://www.guoxk ...
- jquery插件 - 学习笔记 (插件参数及函数的调用)
今天研究的是jquery插件的基本写法: 比如我打算写一个名为 ImageZoom 的插件 前台调用: <script src="ImageZoom.js"></ ...
随机推荐
- Substring with Concatenation of All Words
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- 实现DevExpress GridControl 只有鼠标双击后才进行修改数据
1. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为Click 2. 实现De ...
- [转] "self = [super init]"的解释与潜藏bug
Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 这里 ...
- NewQuant正式在Github发布
Github上的NewQuant https://github.com/xuruilong100/NewQuant NewQuant简介: NewQuant是一个小型开源C++库,可以解决数据分析.金 ...
- Exchange的AutoDiscover服务
最近工作中涉及到Exchange的AutoDiscover服务,最初想学习后输出一个博客文章.但是最后是找到一篇中文博客文章已经非常清楚的解释了这个问题,如下: http://didda.blog.5 ...
- centos6.5为tengine安装php 5.6支持
1.到php官网下载最新的php版本 http://php.net/ 我下载的是php-5.6.28.tar.bz2 2.编译安装 2.1安装依赖 2.1.1 解决libxml2和xml2-confi ...
- 扩展JQuery和JS的方法
//JS的扩展方法: 1 定义类静态方法扩展 2 定义类对象方法扩展 var aClass = function(){} //1 定义这个类的静态方法 aC ...
- AngularJS中的Provider们:Service和Factory等的区别
引言 看了很多文章可能还是不太说得出AngularJS中的几个创建供应商(provider)的方法(factory(),service(),provider())到底有啥区别,啥时候该用啥,之前一直傻 ...
- maven笔记
jar间接依赖: 被依赖的jar的范围要设置成compile,因发布会包含test范围依赖的jar包. 建立项目之间的联系:先在pom中设定依赖关系,然后可以引用了 .conf: C ...
- 解决未能加载文件或程序集“Newtonsoft.Json ...."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
今天遇到了一个比较坑的问题,琢磨了好久... 因为需要引用一个第三方的类库,三方的类库引用的是Newtonsoft.Json.dll 版本7.0.0而我的项目中引用的是Newtonsoft.Json. ...