Jquery扩展-手把手带你体验

Jquery扩展是在项目中经常用到的,有时候为了提取一些公共方法,有时候为了模块化管理等等,下面我们来体验一下。当然扩展离不开Jquery几个基础方法

1:$.extend()

2:$.fn.functionName 添加新的方法

介绍1:$.extend方法

(1):合并到Jquery全局变量

   $.extend({
        sayHi: function (content) {
            console.log("say:" + (content ? content : "default"));
        }
    });
    $.sayHi();
    $.sayHi("haha");

结果:

(2):合并对象字面量

    var defaultSetting = { name: ‘boy‘, age: 30, city: ‘bj‘ };
    var inputSetting = { name: ‘girl‘, age: 60, city: ‘bj‘, hasChild: ‘yes‘ };
    var result = $.extend({}, defaultSetting, inputSetting);
    console.log(result);

结果

(3)合并到Jquery对象中

    $.fn.extend({ sayHi: function (content) {
        console.log("say:" + (content ? content : "default"));
           }
     });
    $("a").sayHi();

结果

 (4)深度合并

     var ndefaultSetting = { name: ‘nihao‘, info: { height: 20, width: 10, glasses: 1,attentionMe:‘hi‘} };
    var nInputSetting = { name: ‘wohao‘, info: { height: 30, width: 30, glasses: 0} };
    var nRet = $.extend({}, ndefaultSetting, nInputSetting);
    var ndepthFalseRet = $.extend(false, {}, ndefaultSetting, nInputSetting);
    var ndepthTrueRet = $.extend(true, {}, ndefaultSetting, nInputSetting);
    console.log(nRet);
    console.log(ndepthFalseRet);
    console.log(ndepthTrueRet);

结果:


开始编写

1.创建scope area防止插件"污染"

      (function ($) {

        })($);

2.编写逻辑代码,设置颜色

       (function ($) {
            var defaultSettings = { color: "red" };
            $.fn.extend({
                setColor: function (options) {
                    var opts = $.extend({}, defaultSettings, options); //合并参数
                    this.each(function () {  //循环考虑到的是当前元素为集合
                        var $this = $(this);
                        $this.css({ color: opts.color });
                    });
                }
            });
        })($);

3.测试

<p>   哈哈哈</p>
       $(function () {
            alert("设置红色");
            $("p").setColor();
            alert("设置黑色");
            $("p").setColor({ color: "black" });
        });

效果为先变红,再次变黑

  

这样一个最基本的扩展就完成了。

改造:用对象来承接,方便维护管理

         (function ($) {
            //定义构造函数
            var myPlugin_SetColor = function (ele, opts) {
                this.$element = ele;
                this.defaultSettings = { color: "red" };
                this.options = $.extend({}, this.defaultSettings, opts);

            }
            //定义方法
            myPlugin_SetColor.prototype = {
                setColor: function () {
                    return this.$element.css({ color: this.options.color });
                }
            }
            //使用插件
            $.fn.setColor = function (options) {
                return new myPlugin_SetColor(this, options).setColor();
            }

        })($);

  测试代码

       $(function () {
            alert("设置红色");
            $("p").setColor();
            alert("设置橙色");
            $("p").setColor({ color: "orange" });
        });

  效果

 补充:最后补充一些小点

说明:

1、代码最前面的分号,可以防止多个文件压缩合并以为其他文件最后一行语句没加分号,而引起合并后的语法错误。

2、匿名函数(function(){})();:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。避免函数体内和外部的变量冲突。

3、$实参:$是jquery的简写,很多方法和类库也使用$,这里$接受jQuery对象,也是为了避免$变量冲突,保证插件可以正常运行。

4、window, document实参分别接受window, document对象,window, document对象都是全局环境下的,而在函数体内的window, document其实是局部变量,不是全局的window, document对象。这样做有个好处就是可以提高性能,减少作用域链的查询时间,如果你在函数体内需要多次调用window 或 document对象,这样把window 或 document对象当作参数传进去,这样做是非常有必要的。当然如果你的插件用不到这两个对象,那么就不用传递这两个参数了。

5、最后剩下一个undefined形参了,那么这个形参是干什么用的呢,看起来是有点多余。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined

这次增加了h3样式,但是还是很丑!虽然很基础,但是还是希望有所帮助。

时间: 2024-12-28 20:30:11

Jquery扩展-手把手带你体验的相关文章

.net中的&quot;异步&quot;-手把手带你体验

周二刚过,离5.1小长假还有那么一阵,北京的天气已经开始热起来了.洗完澡,突然想起博客园一位大哥暂称呼元哥吧,当时我写了一篇windows服务的安装教程(http://www.cnblogs.com/mongo/p/4437934.html),元哥说想在web程序中调用windows服务,并且传递参数给他.首先这个问题我不知道,但是为了能不掉面子便问了一下使用场景为什么想这么做,这么一问,问题来了...元哥是程序已经完善,只是想在体验上更加一层,场景--->页面发出一个请求,请求到后台接受一定参

Windows服务-手把手带你体验

Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用.还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务. 下面我们完成一个windows服务定时向mysql数据库中插入记录,come on! 1

Sqlserver作业-手把手带你体验

所谓Sql Server作业就是按照规定的时间执行指定的脚本,如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理-SQL Server代理-作业来实现. (1)打开Sqlserver,可以再sqlserver代理中看到作业这一项 (2)我们新建一个作业,我用的是自己测试数据库是一个算收益的作业,所以取名BankIncome (3)设置作业的步骤 指定数据库,设置批处理语句,当然可以点击分析进行审阅 (4)设置计划执行,相当于wind

一个jQuery扩展工具包

带有详尽注释的源代码: var jQuery = jQuery || {}; // TODO // ###################################string操作相关函数################################### jQuery.string = jQuery.string || {}; /** * 对目标字符串进行html解码 * * @name jQuery.string.decodeHTML * @function * @grammar j

web前端【第十三篇】jQuery扩展和事件

一.jQuery事件 常用事件 blur([[data],fn]) 失去焦点 focus([[data],fn]) 获取焦点( 搜索框例子) change([[data],fn]) 当select下拉框中的元素发生改变的时候触发change事件(select例子) click([[data],fn]) 点击 dblclick([[data],fn]) 双击 scroll([[data],fn]) 滚动 submit([[data],fn]) 提交 不常用事件 error([[data],fn])

全端之jQuery扩展和事件

一.jQuery事件 常用事件 blur([[data],fn])   失去焦点 focus([[data],fn])  获取焦点( 搜索框例子) change([[data],fn]) 当select下拉框中的元素发生改变的时候触发change事件(select例子) click([[data],fn])  点击 dblclick([[data],fn]) 双击 scroll([[data],fn])   滚动 submit([[data],fn])   提交 不常用事件 error([[da

jQuery之jQuery扩展和事件

jQuery之jQuery扩展和事件 一.jQuery事件 常用事件 blur([[data],fn]) 失去焦点 focus([[data],fn]) 获取焦点( 搜索框例子) change([[data],fn]) 当select下拉框中的元素发生改变的时候触发change事件(select例子) click([[data],fn]) 点击 dblclick([[data],fn]) 双击 scroll([[data],fn]) 滚动 submit([[data],fn]) 提交 不常用事件

手把手带你入门神秘的RxJava

1.什么是RxJava? Rx是Reactive Extensions的简写,翻译为响应的扩展.也就是通过由一方发出信息,另一方响应信息并作出处理的核心框架代码.? 该框架由微软的架构师Erik Meijer领导的团队开发,并在2012年11月开源.? Rx库支持.NET.JavaScript和C++等,现在已经支持几乎全部的流行编程语言了.? Rx的大部分语言库由ReactiveX这个组织负责维护,比较流行的有RxJava/RxJS/Rx.NET,社区网站是 reactivex.io.? Rx

手把手带你掌握新版Webpack4.0

课程介绍:Webpack 目前无论在求职还是工作中,使用越来越普及.而想要学懂,学会Webpack更绝非易事.本课程完整讲清最新版本下的 Webpack 4 知识体系,通过 基础 + 实例 + 原理代码编写 + 复杂案例分析 完成Webpack4的分析与讲解.更重要的是让你对整个前端项目的构建有一个全局化的认识,实现能力思想双升级. 课程目录:第1章 课程导学(打消你的学习疑虑)掌握Webpack越来越成为前端工程师的标配技能,本章会对课程整体进行介绍,打消你的学习疑虑.1-1 课程导学 第2章