Jquery插件开发基础篇

目标:学习开发 一个完整的jquery插件
掌握要点:闭包、公有方法、私有方法、默认参数、参数合并;


学习之前,首先看下面一个实例,实例很简单,实现将当前时间用一个h标签显示出来,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<h2>当前时间</h2>
<h2 class="date">nothing</h2>
<script>
    var dt=new Date();
    var year=dt.getFullYear();
    var month=dt.getMonth();
    var day=dt.getDay();
    var dt_format=year+"年"+month+"月"+day+"日";
    $(".date").text(dt_format);
</script>
</body>
</html>


上面的实例很简单,思路就是new一个时间对象,然后把年、月、日取出来重,显示在h标签。我们就通过这个小例子,实现一个jquery插件的完整开发流程。

步骤分:1、闭包;2、主体方法构成;3、实现链式调用;4、实现公有方法;5、实现私有方法;6、实现默认参数;7、参数合并;8、方法实现;


1、闭包

闭包的作为主要有1、避免全局依赖;2、结构免遭第三方破坏;3、实现封装……可以看出闭包作用是挺多的,下面看下闭包结构:

(function ($) {
    /*do something*/
})(jQuery);

上面就是一个闭包的结构,这里用$作为形参供内部使用,不会受到闭包外部影响,这里括号里的jQuery作为实参传入。


2、主体方法构成

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<h2>当前时间</h2>
<h2 class="date">nothing</h2>
<script>
    (function ($) {

        $.dt_format = function () {
            /*这是类级别写法*/
        };

        $.fn.dt_format = function () {
            /*这是对象级别写法*/
        }

    })(jQuery);
</script>
</body>
</html>

从上面的例子中可以看到,主体方法可以有两种方式,但两种方式有区别。第一种为类级别写法,第二种为对象级别写法,两种方式在外面调用也是不一样的。这里,我们需要第二种方式,编写对象级别的插件。


3、实现链式调用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<h2>当前时间</h2>
<h2 class="date">nothing</h2>
<script>
    (function ($) {
        $.fn.dt_format = function () {
            /*这是对象级别写法*/
            this.each(function () {
                /*do something*/
            });
            return this;
        }
    })(jQuery);
</script>
</body>
</html>

添加以上结构,实现链式调用,例如$.dt_format().addClass("color","red");


4、实现公有或者私有方法


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<h2>当前时间</h2>
<h2 class="date">nothing</h2>
<script>
    (function ($) {
        /*这里是主体方法*/
        $.fn.dt_format = function () {
            /*这是对象级别写法*/
            this.each(function () {
                /*do something*/
            });
            return this;
        };
        /*这里是公有方法*/
        $.fn.date=function (dt) {
            var year = dt.getFullYear();
            var month = dt.getMonth();
            var day = dt.getDay();
            return year + "年/" + month + "月/" + day + "日";
        };
        /*这里是私有方法*/
        var _date=function (dt) {
            var year = dt.getFullYear();
            var month = dt.getMonth();
            var day = dt.getDay();
            return year + "年/" + month + "月/" + day + "日";
        }
    })(jQuery);
</script>
</body>
</html>

上面同样是date方法,但两者是有区别的,前者可以在插件之外调用,能够被外面的方法覆盖,后者为内部私有方法,不可以被外面的方法覆盖与重写。


6、实现默认参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<h2>当前时间</h2>
<h2 class="date">nothing</h2>
<script>
    (function ($) {
        /*这里是主体方法*/
        $.fn.dt_format = function () {
            /*这是对象级别写法*/
            this.each(function () {
                /*do something*/
            });
            return this;
        };
        /*这里是默认参数*/
        $.fn.defaults={
            dt:new Date(),
            data:{},
        };
        /*这里是私有方法*/
       
	var _date = function (dt) {
            var year = dt.getFullYear();
            var month = dt.getMonth();
            var day = dt.getDay();
            return year + "年/" + month + "月/" + day + "日";
        }
})(jQuery);</script></body></html>


默认参数提供插件在初始化时所需要的数据,下面还将实现外部参数与默认参数的融合。


7、实现参数合并

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<h2>当前时间</h2>
<h2 class="date">nothing</h2>
<script>
    (function ($) {
        /*这里是主体方法*/
        $.fn.dt_format = function (options) {
            var setting = $.extend({}, $.fn.defaults, options);
            /*这是对象级别写法*/
            this.each(function () {
                /*do something*/
            });
            return this;
        };
        /*这里是默认参数*/
        $.fn.defaults = {
            dt: new Date(),
            data: {},
        };
        /*这里是私有方法*/
        var _date = function (dt) {
            var year = dt.getFullYear();
            var month = dt.getMonth();
            var day = dt.getDay();
            return year + "年/" + month + "月/" + day + "日";
        }
    })(jQuery);
</script>
</body>
</html>

上面通过$.extend()这个方法来实现内部与外部参数的合并,定义了一个私有变量setting来接收这个合并后的集合。


8、方法实现

现在,  按照思路,我们来实现这个方法,将转换格式的时间显示到h标签上。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<h2>当前时间</h2>
<h2 class="date">nothing</h2>
<script>
    (function ($) {
        /*这里是主体方法*/
        $.fn.dt_format = function (options) {
            var setting = $.extend({}, $.fn.defaults, options);
            /*这是对象级别写法*/
            this.each(function () {
                /*这里将dom对象转成jquery对象,通过element接收*/
                var element=$(this);
                if(element.hasClass("date"))
                    element.text(_date(setting.dt));
                else
                    element.text("this is not time label");

            });
            return this;
        };
        /*这里是默认参数*/
        $.fn.defaults = {
            dt: new Date(),
            data: {},
        };
        /*这里是私有方法*/
        var _date = function (dt) {
            var year = dt.getFullYear();
            var month = dt.getMonth();
            var day = dt.getDay();
            return year + "年/" + month + "月/" + day + "日";
        }
    })(jQuery);
</script>
</body>
</html>

这样,一个基于jquery的插件就已经写好,利用$("h2").dt_format(new Date());或者$(".date").dt_format(new Date());直接调用即可。
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值