jQuery 插件基础

时间:2022-12-14 10:08:44

jQuery 插件基础

翻译 How to Create a Basic Plugin

如果你需要在 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 插件基础的更多相关文章

  1. js最详细的基础,jquery 插件最全的教材

    一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...

  2. 【jQuery基础学习】08 编写自定义jQuery插件

    目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...

  3. 前端基础进阶(十一):详细图解jQuery对象,以及如何扩展jQuery插件

    早几年学习前端,大家都非常热衷于研究jQuery源码.我还记得当初从jQuery源码中学到一星半点应用技巧的时候常会有一种发自内心的惊叹,“原来JavaScript居然可以这样用!” 虽然随着前端的发 ...

  4. 关于jQuery插件imgAreaSelect基础讲解

    关于ImgAreaSelect,  是一jQuery插件,它支持用户通过鼠标拖曳选择图片的一部分,如图片拖曳.图片编辑等~~来具体看一下 1.先下载imgAreaSelect插件 下载地址: 英文:h ...

  5. 自己写jquery插件之模版插件高级篇(一)

    需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...

  6. JS原生ajax与Jquery插件ajax深入学习

    序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...

  7. jquery插件的两种形式

    这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...

  8. JQuery插件之Jquery.datatables.js用法及api

    1.DataTables的默认配置 $(document).ready(function() { $('#example').dataTable(); } ); 示例:http://www.guoxk ...

  9. jquery插件 - 学习笔记 (插件参数及函数的调用)

    今天研究的是jquery插件的基本写法: 比如我打算写一个名为 ImageZoom 的插件 前台调用: <script src="ImageZoom.js"></ ...

随机推荐

  1. WPF-开机自启

    #region 开机自启 /// <summary> /// 开机自启创建 /// </summary> /// <param name="exeName&qu ...

  2. DOM之parentNode与offsetParent

    DOM中有两个属性parentNode和offsetParent,想必区别大家都是知道的,可用法上还是有一些需要注意的地方,尤其是后者,想知道吗?继续往下看咯. parentNode指的是父节点,el ...

  3. POJ 1655 Balancing Act 树的重心

    Balancing Act   Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. ...

  4. 10位时间戳转为C&num;格式时间

    /// <summary> /// 10位时间戳转为C#格式时间 /// </summary> /// <param name=”timeStamp”></p ...

  5. 一个awk if 嵌套 if 的脚本

    [root@makeISO sjx]# cat sex.sh #!/bin/bash # 统计如下内容,并输出结果 # (男职工未婚数量/男员工整体数量)(女员工未婚数量/女员工整体数量) echo ...

  6. python之封装与扩展性

    1.封装与扩展性 封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用的代码:而外部使用者只知道一个接口(函数),只要接口(函数)名,参数不变,使用者的代码永远无需改变.这就提供了一 ...

  7. spring 自定义标签的实现

    在我们进行Spring 框架开发中,估计用到最多的就是bean 标签吧,其实在Spring中像<mvc/><context/>这类标签以及在dubbo配置的标签都是属于自定义的 ...

  8. &lpar; 转 &rpar;超级惊艳 10款HTML5动画特效推荐

    今天我们要来推荐10款超级惊艳的HTML5动画特效,有一些是基于CSS3和jQuery的,比较实用,特别是前几个HTML5动画,简直酷毙了,现在将它们分享给大家,也许你能用到这些HTML5动画和jQu ...

  9. &lbrack;DPDK&rsqb; 转发 DPDK分析

    前半部分,对于背景和需求的分析,写的相当好啊! 原文地址:https://www.jianshu.com/p/0ff8cb4deaef 背景分析 前10年中,网络程序性能优化的目标主要是为了解决C10 ...

  10. Python 中的深拷贝和浅拷贝

    一.浅拷贝python中 对象赋值时 默认是浅拷贝,满足如下规律:1. 对于 不可变对象(字符串,元组 等),赋值 实际上是创建一个新的对象:例如: >>> person=['nam ...