
正文
jquery ----> How to Create a Basic Plugin (翻译)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
http://learn.jquery.com/plugins/basic-plugin-creation/
如何创建一个基本的插件
有时候你想在整个代码中提供一些功能。 例如,也许你想要一个单一的方法,你可以调用一个jQuery selection来对selection执行一系列操作。 在这种情况下,您可能需要编写一个插件。
jQuery如何工作:jQuery对象方法
在我们编写自己的插件之前,我们必须先了解一下jQuery的工作原理。 看看这个代码:
$( "a" ).css( "color", "red" );
这是一些非常基本的jQuery代码,但是你知道幕后发生了什么吗? 无论何时使用$函数选择元素,它都会返回一个jQuery对象。 该对象包含所有您使用的方法(.css(),.click()等)以及适合您选择器的所有元素。 jQuery对象从$ .fn对象中获取这些方法。 这个对象包含了所有的jQuery对象方法,如果我们想写我们自己的方法,它也需要包含这些方法。
基本插件创作
假设我们要创建一个插件,使得一组检索元素中的文本呈绿色。 我们所要做的就是将一个名为greenify的函数添加到$ .fn中,并且它将像其他任何jQuery对象方法一样可用。
$.fn.greenify = function() {
this.css( "color", "green" );
};
$( "a" ).greenify(); // Makes all the links green.6 //使所有的链接变成绿色
注意,要使用另一种方法.css(),我们使用 this,而不是$(this)。 这是因为我们的greenify 函数是与.css()相同对象的一部分。
链接
这很有效,但是我们需要为我们的插件在现实世界中生存而做一些事情。 当你将五个或六个动作链接到一个选择器上时,jQuery的一个特性就是链接。 这是通过让所有jQuery对象方法再次返回原始jQuery对象来实现的(有一些例外:调用.width()而不带参数返回所选元素的宽度,并且不可链接)。 使我们的插件方法可链接需要一行代码:
$.fn.greenify = function() {
this.css( "color", "green" );
return this;
}
$( "a" ).greenify().addClass( "greenified" );
保护$ 别名并添加范围
$变量在JavaScript库中非常受欢迎,如果您使用jQuery另一个库,则必须使jQuery不使用带有jQuery.noConflict()的$。 但是,这会破坏我们的插件,因为它是在假设$是jQuery函数的别名的情况下编写的。 为了与其他插件一起使用,并且仍然使用jQuery $别名,我们需要将所有代码放入立即调用的函数表达式中,然后传递函数jQuery,并将参数命名为$:
(function ( $ ) {
$.fn.greenify = function() {
this.css( "color", "green" );
return this;
};
}( jQuery ));
此外,立即调用函数的主要目的是允许我们拥有自己的私有变量。假设我们想要一个不同的绿色,我们想把它存储在一个变量中。
(function ( $ ) {
var shade = "#556b2f";
$.fn.greenify = function() {
this.css( "color", shade );
return this;
};
}( 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元素的引用,这就是为什么jQuery对象通常被称为集合。 如果您想对特定元素进行任何操作(例如获取数据属性,计算特定位置),那么您需要使用.each()来遍历元素。
$.fn.myNewPlugin = function() {
return this.each(function() {
// Do something to each element here. // 在这里为每个元素做点事情。
});
};
注意,我们返回.each()的结果而不是返回this结果。 由于.each()已经是可链接的,它返回this,然后我们返回。 这是维持可持续性的一种比迄今为止我们所做的更好的方法。
接受选项
随着你的插件变得越来越复杂,通过接受选项让你的插件可定制是一个好主意。 最简单的方法是使用对象字面值,特别是如果有很多选项的话。 让我们改变我们的绿化插件接受一些选项。
(function ( $ ) {
$.fn.greenify = 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" ).greenify({
color: "orange"
});
#556b2f的颜色默认值被$ .extend()覆盖为橙色。
把它放在一起
下面是使用我们讨论过的一些技巧的一个小插件的例子:
(function( $ ) {
$.fn.showLinkLocation = function() {
this.filter( "a" ).each(function() {
var link = $( this );
link.append( " (" + link.attr( "href" ) + ")" );
});
return this;
};
}( jQuery ));
// Usage example:
$( "a" ).showLinkLocation();
这个方便的插件遍历集合中的所有锚,并在括号中追加href属性。
<!-- Before plugin is called: --> <a href="page.html">Foo</a> <!-- After plugin is called: --> <a href="page.html">Foo (page.html)</a>
我们的插件可以优化,但:
(function( $ ) {
$.fn.showLinkLocation = function() {
this.filter( "a" ).append(function() {
return " (" + this.href + ")";
});
return this;
};
}( jQuery ));
我们使用.append()方法的功能来接受回调,并且该回调的返回值将决定集合中每个元素的附加内容。 另请注意,我们没有使用.attr()方法来检索href属性,因为本地DOM API使我们可以轻松访问具有恰当名称的href属性。
jquery ----> How to Create a Basic Plugin (翻译)的更多相关文章
-
How to Create a Basic Plugin 如何写一个基础的jQuery插件
How to Create a Basic Plugin Sometimes you want to make a piece of functionality available throughou ...
-
How to Create a Basic Plugin
Sometimes you want to make a piece of functionality available throughout your code. For example, per ...
-
jQuery-How to Create a Basic Plugin
官方插件:http://learn.jquery.com/plugins/basic-plugin-creation/ $.extend方法和$.fn.extend方法都可以用来扩展jQuery功能. ...
-
Create a Basic Shader in Shader Forge
[Create a Basic Shader in Shader Forge] 1.打开ShaderForge.Window-> Shader Forge.(打开速度较慢) 2.通过NewSha ...
-
Signs of a poorly written jQuery plugin 翻译 (Jquery插件开发注意事项,Jquey官方推荐)
原文链接:http://remysharp.com/2010/06/03/signs-of-a-poorly-written-jquery-plugin/ 原文作者:remy sharp So far ...
-
Openstack Basic Networking 翻译
自己翻译,加强理解.并学习英文和写作. 英文地址:http://docs.openstack.org/networking-guide/intro_basic_networking.html 目录: ...
-
jquery的延迟加载插件Lazy Load Plugin for jQuery
下载:https://github.com/tuupola/jquery_lazyload 使用:http://www.appelsiini.net/projects/lazyload 翻译:http ...
-
生死相依:说说JQuery中die()、live()详解[翻译]
一个web前端工程师,应该知道jquery的.live()函数,知道它是做什么用的,但是不知它是怎么样工作的,使用起来也是不得得心应手的,甚至也没听说过.die()(去掉bind事件).即使你能熟悉这 ...
-
jquery/vue/react前端多语言国际化翻译方案指南
❝ 本文章共3470字,预计阅读时间5-10分钟. ❞ 国际化-前言 每个开发者能希望编写的程序可以让全世界的用户使用,它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素.换种说法,「应用程序 ...
随机推荐
-
20145308 《网络对抗》 MAL_后门应用与实践 学习总结
20145308 <网络对抗> MAL_后门应用与实践 学习总结 实践目的 使用nc实现win和Linux间的后门连接 meterpreter的应用 MSF POST的应用 知识点学习总结 ...
-
BSGS算法学习笔记
从这里开始 离散对数和BSGS算法 扩展BSGS算法 离散对数和BSGS算法 设$x$是最小的非负整数使得$a^{x}\equiv b\ \ \ \pmod{m}$,则$x$是$b$以$a$为底的离散 ...
-
Django框架(九) Django之ORM常用字段和参数
ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范 ...
-
upc组队赛1 流连人间的苏苏
流连人间的苏苏 题目描述 苏苏在做红尘仙的任务时,发现坐落于风景秀丽.四季如春的昆明市的云南中医学院. 没过多久,苏苏就喜欢上了这个学校.以致于苏苏忘了回涂山的时间,现在她只剩下d天的时间待在云南中医 ...
-
【做题】CF388D. Fox and Perfect Sets——线性基&数位dp
原文链接https://www.cnblogs.com/cly-none/p/9711279.html 题意:求有多少个非空集合\(S \subset N\)满足,\(\forall a,b \in ...
-
【Spring Security】五、自定义过滤器
在之前的几篇security教程中,资源和所对应的权限都是在xml中进行配置的,也就在http标签中配置intercept-url,试想要是配置的对象不多,那还好,但是平常实际开发中都往往是非常多的资 ...
-
ES6中的函数和数组补漏
对象的函数解构 我们在前后端分离时,后端经常返回来JSON格式的数据,前端的美好愿望是直接把这个JSON格式数据当作参数,传递到函数内部进行处理.ES6就为我们提供了这样的解构赋值. let json ...
-
Bytom国密网说明和指南
比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 国密算法 ...
-
【C#】C# in deep 笔记
1. delegate and events http://csharpindepth.com/Articles/Chapter2/Events.aspx 2. 显式类型 和 隐式类型 3. 静态类型 ...
-
forEach、map、filter、find、sort、some等易错点整理
一.常用方法解析 说起数组操作,我们肯定第一反应就是想到forEach().map().filter()等方法,下面分别阐述一下各方法的优劣. 1.forEach 1.1 基础点 forEac ...
How to Create a Basic Plugin Sometimes you want to make a piece of functionality available throughou ...
Sometimes you want to make a piece of functionality available throughout your code. For example, per ...
官方插件:http://learn.jquery.com/plugins/basic-plugin-creation/ $.extend方法和$.fn.extend方法都可以用来扩展jQuery功能. ...
[Create a Basic Shader in Shader Forge] 1.打开ShaderForge.Window-> Shader Forge.(打开速度较慢) 2.通过NewSha ...
原文链接:http://remysharp.com/2010/06/03/signs-of-a-poorly-written-jquery-plugin/ 原文作者:remy sharp So far ...
自己翻译,加强理解.并学习英文和写作. 英文地址:http://docs.openstack.org/networking-guide/intro_basic_networking.html 目录: ...
下载:https://github.com/tuupola/jquery_lazyload 使用:http://www.appelsiini.net/projects/lazyload 翻译:http ...
一个web前端工程师,应该知道jquery的.live()函数,知道它是做什么用的,但是不知它是怎么样工作的,使用起来也是不得得心应手的,甚至也没听说过.die()(去掉bind事件).即使你能熟悉这 ...
❝ 本文章共3470字,预计阅读时间5-10分钟. ❞ 国际化-前言 每个开发者能希望编写的程序可以让全世界的用户使用,它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素.换种说法,「应用程序 ...
-
20145308 《网络对抗》 MAL_后门应用与实践 学习总结
20145308 <网络对抗> MAL_后门应用与实践 学习总结 实践目的 使用nc实现win和Linux间的后门连接 meterpreter的应用 MSF POST的应用 知识点学习总结 ...
-
BSGS算法学习笔记
从这里开始 离散对数和BSGS算法 扩展BSGS算法 离散对数和BSGS算法 设$x$是最小的非负整数使得$a^{x}\equiv b\ \ \ \pmod{m}$,则$x$是$b$以$a$为底的离散 ...
-
Django框架(九) Django之ORM常用字段和参数
ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范 ...
-
upc组队赛1 流连人间的苏苏
流连人间的苏苏 题目描述 苏苏在做红尘仙的任务时,发现坐落于风景秀丽.四季如春的昆明市的云南中医学院. 没过多久,苏苏就喜欢上了这个学校.以致于苏苏忘了回涂山的时间,现在她只剩下d天的时间待在云南中医 ...
-
【做题】CF388D. Fox and Perfect Sets——线性基&数位dp
原文链接https://www.cnblogs.com/cly-none/p/9711279.html 题意:求有多少个非空集合\(S \subset N\)满足,\(\forall a,b \in ...
-
【Spring Security】五、自定义过滤器
在之前的几篇security教程中,资源和所对应的权限都是在xml中进行配置的,也就在http标签中配置intercept-url,试想要是配置的对象不多,那还好,但是平常实际开发中都往往是非常多的资 ...
-
ES6中的函数和数组补漏
对象的函数解构 我们在前后端分离时,后端经常返回来JSON格式的数据,前端的美好愿望是直接把这个JSON格式数据当作参数,传递到函数内部进行处理.ES6就为我们提供了这样的解构赋值. let json ...
-
Bytom国密网说明和指南
比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 国密算法 ...
-
【C#】C# in deep 笔记
1. delegate and events http://csharpindepth.com/Articles/Chapter2/Events.aspx 2. 显式类型 和 隐式类型 3. 静态类型 ...
-
forEach、map、filter、find、sort、some等易错点整理
一.常用方法解析 说起数组操作,我们肯定第一反应就是想到forEach().map().filter()等方法,下面分别阐述一下各方法的优劣. 1.forEach 1.1 基础点 forEac ...





