• jQuery插件开发初探


    最简单的插件

    $.fn.changeStyle = function (colorStr) {
        $(this).css('color',colorStr);
    }
    

    应用如下:

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>jquery插件开发</title>
    </head>
    <body>
        <p>Hello jQuery!</p>
    </body>
    
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.extend.js"></script>
    
    <script type="text/javascript">
        $('p').changeStyle('red');
    </script>
    </html>
    

    但是如果想连续使用,就不好用了,比如:

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>jquery插件开发</title>
    </head>
    <body>
        <p>Hello jQuery!</p>
    </body>
    
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.extend.js"></script>
    
    <script type="text/javascript">
        $('p').changeStyle('red').css('font-size','20px');
    </script>
    </html>
    

    这里的设置字体大小就没有效果了。

    需要简单处理一下上面的拓展程序。

    $.fn.changeStyle = function (colorStr) {
        this.css('color',colorStr);
        return this;
    }
    

    加上return this;就可以了。

    进一步扩展

    (function ($) {
        $.fn.changeStyle = function (colorStr) {
            this.css('color',colorStr);
            return this;
        }
    }(jQuery));
    
    

    这样处理会更加安全,防止被污染

    支持更多参数

    (function ($) {
        $.fn.changeStyle = function (colorStr,fontSize) {
            this.css('color',colorStr).css('font-size',fontSize);
            return this;
        }
    }(jQuery));
    
    

    这里传递了两个参数

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>jquery插件开发</title>
    </head>
    <body>
        <p>Hello jQuery!</p>
    </body>
    
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.extend.js"></script>
    
    <script type="text/javascript">
        $('p').changeStyle('red','25px');
    </script>
    </html>
    

    灵活处理参数

    (function ($) {
        $.fn.changeStyle = function (option) {
            this.css('color',option.colorStr).css('font-size',option.fontSize);
            return this;
        }
    }(jQuery));
    
    

    这里用json对象传递参数,更加灵活。

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>jquery插件开发</title>
    </head>
    <body>
        <p>Hello jQuery!</p>
    </body>
    
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.extend.js"></script>
    
    <script type="text/javascript">
        $('p').changeStyle({colorStr:'red',fontSize:'25px'});
    </script>
    </html>
    

    支持默认参数处理

    (function ($) {
        $.fn.changeStyle = function (option) {
            var defaultSetting = {colorStr:'blue',fontSize:'12px'};
            var setting        = $.extend(defaultSetting,option);
            this.css('color',setting.colorStr).css('font-size',setting.fontSize);
            return this;
        }
    }(jQuery));
    
    

    这里会合并给定的参数和默认的参数,
    如果只传一个参数,就会启用默认的参数。

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>jquery插件开发</title>
    </head>
    <body>
        <p>Hello jQuery!</p>
    </body>
    
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.extend.js"></script>
    
    <script type="text/javascript">
        $('p').changeStyle({fontSize:'25px'});
    </script>
    </html>
    

    后记

    也可以这样处理

    (function ($) {
        $.fn.extend({
            changeStyle:function (option) {
                var defaultSetting = {colorStr:'blue',fontSize:'12px'};
                var setting        = $.extend(defaultSetting,option);
                this.css('color',setting.colorStr).css('font-size',setting.fontSize);
                return this;
    
            }
        });
    }(jQuery));
    
    

    $.fn $.fn.extend $.extend 的理解

    (function ($) {
        $.fn.extend({
            changeStyle: function (option) {
                var defaultSetting = {colorStr: 'blue', fontSize: '12px'};
                var setting = $.extend(defaultSetting, option);
                this.css('color', setting.colorStr).css('font-size', setting.fontSize);
                return this;
    
            }
        });
    
        // 静态方法,直接通过$调用,不可以通过元素调用
        $.extend({
            min: function (a, b) {
                return a < b ? a : b;
            },
    
            max: function (a, b) {
                return a > b ? a : b;
            }
        });
    
        // 可以通过元素调用
        $.fn.extend({
            min: function (a, b) {
                return a < b ? a : b;
            },
    
            max: function (a, b) {
                return a > b ? a : b;
            }
        });
    }(jQuery));
    
    

    调用如下,

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>jquery插件开发</title>
    </head>
    <body>
        <p>Hello jQuery!</p>
    </body>
    
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.extend.js"></script>
    
    <script type="text/javascript">
        $('p').changeStyle({fontSize:'25px'});
        $.min('3','5'); // 3
        $('p').min('3','5'); // 3
    </script>
    </html>
    
    1. $.fn 和 $.fn.extend 都是针对成员进行扩展的,$.extend扩展的是静态方法。
    2. jQuery.fn.extend拓展的方法,你得用在jQuery对象上面才行啊!
    3. jQuery.extend(),是扩展的jQuery这个类。
    
  • 相关阅读:
    js模板引擎v5
    js模板引擎v6
    python cookbook学习笔记[一次完成多个字符串的替换]
    您可能没注意到的ie6 select bug
    lambda参数写法问题
    python dict2种遍历方式及区别
    记一次 AXI id debug
    R2B fpga flow script
    axi 1.0
    advanced fpga design
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/6305984.html
Copyright © 2020-2023  润新知