• jQuery插件开发


    jQuery插件有两种写法

    • $.extend(myMethod:function(){}) 类似于给jQuery添加静态方法
    • $.fn.myMethod=function(){} 应用于DOM元素上的方法,一般jQuery都是使用这个方法

    本文介绍$.fn.myMethod=function(){}这种方式
    直接上一个例子,这个例子是对页面上所有的超链接应用样式

            ; (function ($, window, document, undefined) {
                $.fn.beautifulHyperlink = function (options) {
                    var defaults = { 'color': 'red', 'fontSize': '15px' };
                    var settings = $.extend({}, defaults, options);
    
                    return this.each(function () {
                        $(this).css({ 'color': settings.color, 'fontSize': settings.fontSize });
                    });
                    //this.css({ 'color': settings.color, 'fontSize': settings.fontSize });
                }
            })(jQuery, window, document)
            
            //调用方法
            $(function () {
                $('a').beautifulHyperlink({ 'color': 'yellow' });
            });
    

    关键点如下

    1. 插件最前面添加;,作用是防止其他js代码结束没有;,导致js错误
    2. 关于插件参数:options是用于传入的,defaults是默认值,settings是合并后最终参数值;$.extend({}, defaults, options)中的{}作用是保证default不被改变,饭后后续用到defaults中的原始值
    3. return的作用是保证链式编程
    4. this.each的作用是可以对每个dom元素单独处理,这里的例子可以不用this.each
    5. (function ($, window, document, undefined)和(jQuery, window, document)的作用是防止变量污染,保证插件中使用的局部变量;值的注意的是undefined没有传值进去,恰恰刚好传进去的undefined就是undefined,这是一个巧合

    最后贴一下终极优化方案,使用面向对象的思想,把操作方法提到对象中

            ; (function ($, window, document, undefined) {
                var Beautifier = function (eles, opts) {
                    this.$elements = eles;
                    this.options = opts;
                    this.defaults = { 'color': 'red', 'fontSize': '15px' };
                    this.settings = $.extend({}, this.defaults, this.options);
                }
                Beautifier.prototype = {
                    beautify: function () {
                        var thisObj = this; //指向当前对象Beautifier,否则下面settings引用不到,因为each中的this是被遍历对象中当前值的dom对象
                        return this.$elements.each(function () {
                            $(this).css({ 'color': thisObj.settings.color, 'fontSize': thisObj.settings.fontSize });
                        });
                        //return this.$elements.css({ 'color': this.settings.color, 'fontSize': this.settings.fontSize });
                    }
                };
    
                $.fn.beautifulHyperlinkEx = function (options) {
                    var beautifier = new Beautifier(this, options);
                    beautifier.beautify();
                }
            })(jQuery, window, document)
    
            ; (function ($, window, document, undefined) {
                var Beautifier = {
                    beautify: function ($ele, settings) {
                        $ele.css({ 'color': settings.color, 'fontSize': settings.fontSize });
                    }
                };
    
                $.fn.beautifulHyperlink = function (options) {
                    var defaults = { 'color': 'red', 'fontSize': '15px' };
                    var settings = $.extend({}, defaults, options);
    
                    return this.each(function () {
                        Beautifier.beautify($(this), settings);
                    });
                }
            })(jQuery, window, document)
    
  • 相关阅读:
    vs.net 2005, 没有找到MSVCR80D.dll的完美解决方案
    C++内存布局从一个修改私有变量的问题想到的
    堆栈详解
    加载.x文件
    深入分析规则引擎
    高级着色语言HLSL入门(5)
    字符数组,字符指针,Sizeof总结
    C++ 隐式和显式 初始化,类型转换
    fread()和fwrite()函数分析
    结构体 对齐的问题
  • 原文地址:https://www.cnblogs.com/yinchh/p/10647661.html
Copyright © 2020-2023  润新知